基于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 相关文章推荐
firefox中用javascript实现鼠标位置的定位
Jun 17 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
Jul 10 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
Mar 05 Javascript
require.js深入了解 require.js特性介绍
Sep 04 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
Mar 28 Javascript
js实现div层缓慢收缩与展开的方法
May 11 Javascript
微信小程序 九宫格实例代码
Jan 21 Javascript
JavaScript面向对象精要(上部)
Sep 12 Javascript
Node.JS中快速扫描端口并发现局域网内的Web服务器地址(80)
Sep 18 Javascript
vue学习教程之带你一步步详细解析vue-cli
Dec 26 Javascript
Angularjs Promise实例详解
Mar 15 Javascript
Vue项目中ESlint规范示例代码
Jul 04 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 $_SERVER["REQUEST_URI"]获取值的通用解决方法
2010/06/21 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
深入分析jsonp协议原理
2015/09/26 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
python 正则式使用心得
2009/05/07 Python
python登陆asp网站页面的实现代码
2015/01/14 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
数据库基础的一些面试题
2012/02/25 面试题
课堂教学改革实施方案
2014/03/17 职场文书
电台编导求职信
2014/05/06 职场文书
演讲稿格式范文
2014/05/19 职场文书
市委常委班子党的群众路线教育实践活动整改措施
2014/10/02 职场文书
关于颐和园的导游词
2015/01/30 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
入党积极分子考察意见
2015/06/02 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏