基于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 相关文章推荐
checkbox 多选框 联动实现代码
Oct 22 Javascript
悬浮数字的实现案例
Feb 19 Javascript
Bootstrap每天必学之简单入门
Nov 19 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
Oct 05 Javascript
详解node+express+ejs+bootstrap构建项目
Sep 27 Javascript
Vue异步加载about组件
Oct 31 Javascript
Vue父组件调用子组件事件方法
Feb 23 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
Feb 25 Javascript
详解vue更改头像功能实现
Apr 28 Javascript
vue 路由子组件created和mounted不起作用的解决方法
Nov 05 Javascript
原生js实现购物车
Sep 23 Javascript
jquery自定义组件实例详解
Dec 31 jQuery
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
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
用JavaScript显示随机图像或引用
2009/04/21 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
js倒计时抢购实例
2015/12/20 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
JavaScript实现三级级联特效
2017/11/05 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
python 杀死自身进程的实现方法
2019/07/01 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
python使用hdfs3模块对hdfs进行操作详解
2020/06/06 Python
python中字符串的编码与解码详析
2020/12/03 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
高考自主招生自荐信
2013/10/20 职场文书
动物科学专业毕业生的自我评价
2013/11/29 职场文书
应用心理学个人的求职信
2013/12/08 职场文书
C++程序员求职信范文
2014/04/14 职场文书
挂职学习心得体会
2014/09/09 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
离婚纠纷代理词
2015/05/23 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python