基于javascript、ajax、memcache和PHP实现的简易在线聊天室


Posted in Javascript onFebruary 03, 2015

在线聊天室(online chatrooms)是一个共多人进行沟通交流的网络平台,随着越来越多的新技术的发明和成熟运用,在线聊天室也出现使用各种不同技术的, 这篇文章我想简单总结一下。

首先说一下前台技术,最新的当然是基于HTML5的websocket,它实现了浏览器与服务器全双工通信(full-duplex)。WebSocket通信协议于2011年被IETF定为标准 RFC 6455,WebSocketAPI被W3C定为标准。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。但是由于Websocket是HTML5的API,很多浏览器都还得不到支持,所以这种方式现在应用不是特别多。第二种是ajax,它是采用一种轮询的方式,每隔一段时间,去服务器上下载数据,查看是否更新,它的优点是异步请求处理(也可以设置同步),不会阻塞用户其它操作,缺点是不间断的轮询不仅占用消耗带宽,也占用过多的终端和服务器资源,而且由于ajax轮询有时间间隔,所以获得的消息不是实时的,因为不是消息触发,ajax的效率几乎是最低的。第三种是基于服务器的推送技术(comet),说是推送,其实是伪推送,原理是在终端和服务器之间建立一条长连接,前台通过判定这条长连接的内容是否改变而获取内容,它的优点是占用资源较少,实时性好,确实是需要服务器特别的支持,而且长时间占用连接。现在越来越多的服务都采用了这种技术。

再来说下后台,聊天室属于高IO的应用,数据库方面可能是最大瓶颈,聊天的特点是短文本较多,类似于微博。而且它属于多用户系统,当用户达到一个数量级时,如果采用Mysql等关系型数据库的话,查询的压力应该是很大的。如果没有特殊的要求,个人认为,聊天记录不需要永久存储,这时候memcache,redis等基于内存的存储系统就能发挥作用了。下面是我开发的一个简单的基于ajax+php+memcache的在线聊天室。

在这个聊天室中,所有聊天记录都存放在memcache中,用cid存储聊天记录的最大id,用msgcid存放聊天记录,每插入一条记录,cid自增1。前台通过ajax获取获取json格式数据,由于memcache是基于内存的特性,整体系统运行速度是非常快的。下面是系统的源码,整个系统只有两个文件,合起来不到10KB。

基于javascript、ajax、memcache和PHP实现的简易在线聊天室

https://github.com/hitoy/online-chatroom

系统需求:
1,安装有memcache
2,php安装memcache扩展
3,支持Javascript和ajax的现代浏览器

Javascript 相关文章推荐
JavaScript 创建对象和构造类实现代码
Jul 30 Javascript
javascript 四则运算精度修正函数代码
May 31 Javascript
JQuery 应用 JQuery.groupTable.js
Dec 15 Javascript
jquery 新建的元素事件绑定问题解决方案
Jun 12 Javascript
JavaScript设计模式之单件模式介绍
Dec 28 Javascript
JavaScript自定义数组排序方法
Feb 12 Javascript
详解Vue生命周期的示例
Mar 10 Javascript
vue组件name的作用小结
May 23 Javascript
Vue中使用vux配置代码详解
Sep 16 Javascript
Jquery获取radio选中值实例总结
Jan 17 jQuery
JS实现的全选、全不选及反选功能【案例】
Feb 19 Javascript
JavaScript使用prototype属性实现继承操作示例
May 22 Javascript
jQuery内部原理和实现方式浅析
Feb 03 #Javascript
jQuery中extend函数的实现原理详解
Feb 03 #Javascript
jQuery中noconflict函数的实现原理分解
Feb 03 #Javascript
jQuery中的pushStack实现原理和应用实例
Feb 03 #Javascript
JavaScript闭包详解
Feb 02 #Javascript
js实现浏览器窗口大小被改变时触发事件的方法
Feb 02 #Javascript
javascript的switch用法注意事项分析
Feb 02 #Javascript
You might like
西德产收音机
2021/03/01 无线电
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
Vue组件开发之LeanCloud带图形校验码的短信发送功能
2017/11/07 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python3.2中Print函数用法实例详解
2015/05/19 Python
解密Python中的描述符(descriptor)
2015/06/03 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
Python hashlib模块加密过程解析
2019/11/05 Python
python实现TCP文件传输
2020/03/20 Python
高中毕业自我鉴定
2013/12/19 职场文书
财务工作者先进事迹材料
2014/01/17 职场文书
优秀党员主要事迹
2014/01/19 职场文书
学生会主席竞聘书
2014/03/31 职场文书
大学社团计划书
2014/05/01 职场文书
慰问信范文
2015/02/14 职场文书
早会开场白台词大全
2015/06/01 职场文书
治庸问责工作总结
2015/08/11 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
MySQL 视图(View)原理解析
2021/05/19 MySQL