基于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 相关文章推荐
基于JQuery的一个简单的鼠标跟随提示效果
Sep 23 Javascript
Prototype源码浅析 Number部分
Jan 16 Javascript
JS使用getComputedStyle()方法获取CSS属性值
Apr 23 Javascript
JS模式之单例模式基本用法
Jun 30 Javascript
深入探讨前端框架react
Dec 09 Javascript
JavaScript实现时间倒计时跳转(推荐)
Jun 28 Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 Javascript
BootStrap fileinput.js文件上传组件实例代码
Feb 20 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
Mar 23 Javascript
Vue EventBus自定义组件事件传递
Jun 25 Javascript
js 实现watch监听数据变化的代码
Oct 13 Javascript
在vue中动态添加class类进行显示隐藏实例
Nov 09 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获取网卡地址的代码
2008/04/09 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
文本框中,回车键触发事件的js代码[多浏览器兼容]
2010/06/07 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
小试SVG之新手小白入门教程
2019/01/08 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
[45:46]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS DT
2014/05/23 DOTA
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
python sort、sort_index方法代码实例
2019/03/28 Python
python 通过邮件控制实现远程控制电脑操作
2020/03/16 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
python 基于opencv操作摄像头
2020/12/24 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
英国自行车商店:AW Cycles
2021/02/24 全球购物
《云房子》教学反思
2014/04/20 职场文书
演讲稿格式
2014/04/30 职场文书
师范类求职信
2014/06/21 职场文书
人力资源职位说明书
2014/07/29 职场文书
小班下学期个人总结
2015/02/12 职场文书
2015初中团委工作总结
2015/07/28 职场文书
学校教学管理制度
2015/08/06 职场文书
Django操作cookie的实现
2021/05/26 Python
总结高并发下Nginx性能如何优化
2021/11/01 Servers