基于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 相关文章推荐
推荐dojo学习笔记
Mar 24 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
Apr 01 Javascript
javascript温习的一些笔记 基础常用知识小结
Jun 22 Javascript
分享10个优化代码的CSS和JavaScript工具
May 11 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
Jun 13 Javascript
关于JS 预解释的相关理解
Jun 28 Javascript
JS基于递归实现倒计时效果的方法
Nov 26 Javascript
Vue cli+mui 区域滚动的实例代码
Jan 25 Javascript
对vue中的事件穿透与禁止穿透实例详解
Oct 28 Javascript
React倒计时功能实现代码——解耦通用
Sep 18 Javascript
vue3.0中setup使用(两种用法)
Dec 02 Vue.js
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
Dec 10 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 巧用数组降低程序的时间复杂度
2010/01/01 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
php实现留言板功能
2017/03/05 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
2016/05/17 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
DIV+CSS+jQ实现省市联动可扩展
2016/06/22 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
vue2 前端搜索实现示例
2018/02/26 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
HTML的form表单和django的form表单
2019/07/25 Python
PyTorch中Tensor的拼接与拆分的实现
2019/08/18 Python
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
优秀士兵先进事迹
2014/02/06 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
八月迷情观后感
2015/06/11 职场文书
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
2022/06/21 Golang