基于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 相关文章推荐
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
Mar 10 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
Dec 28 Javascript
使用jQuery实现验证上传图片的格式与大小
Dec 03 Javascript
jQuery实现在列表的首行添加数据
May 19 Javascript
再JavaScript的jQuery库中编写动画效果的指南
Aug 13 Javascript
一步步教你利用Docker设置Node.js
Nov 20 Javascript
nvm、nrm、npm 安装和使用详解(小结)
Jan 17 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
Feb 02 Javascript
微信小程序封装的HTTP请求示例【附升级版】
May 11 Javascript
ES6 Generator函数的应用实例分析
Jun 26 Javascript
js实现div色块碰撞
Jan 16 Javascript
vue-router定义元信息meta操作
Dec 07 Vue.js
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中simplexml_load_string使用实例分享
2014/02/13 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
javascript基本类型详解
2014/11/28 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
利用Python学习RabbitMQ消息队列
2015/11/30 Python
Python 基础教程之包和类的用法
2017/02/23 Python
Python三级菜单的实例
2017/09/13 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
python实现音乐下载的统计
2018/06/20 Python
pandas.cut具体使用总结
2019/06/24 Python
基于Python实现扑克牌面试题
2019/12/11 Python
医学院四年学习生活的自我评价
2013/11/06 职场文书
退伍老兵事迹材料
2014/01/31 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
公证委托书标准格式
2014/09/11 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
劳模先进事迹材料
2014/12/24 职场文书
2015年秋季开学典礼校长致辞
2015/07/16 职场文书
施工安全责任协议书
2016/03/23 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL