基于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 相关文章推荐
Dom与浏览器兼容性说明
Oct 25 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
Jan 23 Javascript
Jquery Validate 正则表达式实用验证代码大全
Aug 23 Javascript
浅析hasOwnProperty方法的应用
Nov 20 Javascript
jQuery 3.0 的变化及使用方法
Feb 01 Javascript
Javascript HTML5 Canvas实现的一个画板
Apr 12 Javascript
JavaScript_object基础入门(必看篇)
Jun 13 Javascript
Vue.js开发环境搭建
Nov 10 Javascript
Express进阶之log4js实用入门指南
Feb 10 Javascript
使用vuex的state状态对象的5种方式
Apr 19 Javascript
jquery实现动态创建form并提交的方法示例
May 27 jQuery
JS原型和原型链原理与用法实例详解
Feb 05 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
php高级编程-函数-郑阿奇
2011/07/04 PHP
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
Python中is与==判断的区别
2017/03/28 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
安全检查验收制度
2014/01/12 职场文书
会计岗位职责模板
2014/03/12 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
伊琍体标语
2014/06/25 职场文书
村党支部书记个人对照材料汇报
2014/10/26 职场文书
九华山导游词
2015/02/03 职场文书
公司放假通知怎么写
2015/04/15 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书