基于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 prev ~ siblings选择器使用介绍
Aug 09 Javascript
jquery mobile事件多次绑定示例代码
Sep 13 Javascript
从零学JSON之JSON数据结构
May 19 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
Aug 07 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
Jan 28 Javascript
浏览器兼容的JS写法总结
Apr 27 Javascript
js删除数组元素、清空数组的简单方法(必看)
Jul 27 Javascript
原生JS获取元素集合的子元素宽度实例
Dec 14 Javascript
Javascript面试经典套路reduce函数查重
Mar 23 Javascript
javascript 中iframe高度自适应(同域)实例详解
May 16 Javascript
微信小程序如何刷新当前界面的实现方法
Jun 07 Javascript
JS深入学习之数组对象排序操作示例
May 01 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
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
php中计算程序运行时间的类代码
2012/11/03 PHP
php文件夹与文件目录操作函数介绍
2013/09/09 PHP
php获得url参数中具有&的值的方法
2014/03/05 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
2014/04/30 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
AngularJS中$apply方法和$watch方法用法总结
2016/12/13 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
利用Python开发实现简单的记事本
2016/11/15 Python
Python开发的实用计算器完整实例
2017/05/10 Python
Python基于回溯法解决01背包问题实例
2017/12/06 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
公共事业管理本科生求职信
2013/10/07 职场文书
企业年会主持词
2014/03/27 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
通报表扬范文
2015/01/17 职场文书
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android