基于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 相关文章推荐
关于this和self的使用说明
Aug 01 Javascript
基于jquery的web页面日期格式化插件
Nov 15 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
Apr 18 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
Sep 23 Javascript
jQuery select自动选中功能实现方法分析
Nov 28 Javascript
javascript学习之json入门
Dec 22 Javascript
微信小程序 支付功能开发错误总结
Feb 21 Javascript
JS实现异步上传压缩图片
Apr 22 Javascript
JS验证全角与半角及相互转化的介绍
May 18 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
Sep 02 Javascript
5个你不知道的JavaScript字符串处理库(小结)
Jun 01 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
Jul 14 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 面向对象 PHP5 中的常量
2010/05/05 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
php构造函数与析构函数
2016/04/23 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
jsonp原理及使用
2013/10/28 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
Vue 样式绑定的实现方法
2019/01/15 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
python提取内容关键词的方法
2015/03/16 Python
python计算N天之后日期的方法
2015/03/31 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
详解Python传入参数的几种方法
2019/05/16 Python
python FTP批量下载/删除/上传实例
2019/12/22 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
Casetify官网:自制专属手机壳、iPad护壳和Apple Watch手表带
2018/05/09 全球购物
Visual-Click葡萄牙:欧洲领先的在线眼镜商
2020/02/17 全球购物
资源环境与城市管理专业推荐信
2013/11/30 职场文书
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
召开会议通知范文
2015/04/15 职场文书
学术会议领导致辞
2015/07/29 职场文书
Netty分布式客户端接入流程初始化源码分析
2022/03/25 Java/Android
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server