基于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 相关文章推荐
js 面向对象的技术创建高级 Web 应用程序
Feb 25 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
May 21 Javascript
Jquery数独游戏解析(一)-页面布局
Nov 05 Javascript
用JavaScript修改CSS属性的代码
May 06 Javascript
JavaScript基础语法、dom操作树及document对象
Dec 02 Javascript
JavaScript中数据结构与算法(四):串(BF)
Jun 19 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
Jun 14 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
Jul 13 Javascript
简单谈谈vue的过渡动画(推荐)
Oct 11 Javascript
解决layui轮播图有数据不显示的情况
Sep 16 Javascript
NProgress显示顶部进度条效果及使用详解
Sep 21 Javascript
原生js实现无缝轮播图效果
Jan 28 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
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
Vue自定义弹窗指令的实现代码
2018/08/13 Javascript
使用微信SDK自定义分享的方法
2019/07/03 Javascript
Python性能优化的20条建议
2014/10/25 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
Python实现选择排序
2017/06/04 Python
Python简单实现socket信息发送与监听功能示例
2018/01/03 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
python定位xpath 节点位置的方法
2019/08/27 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
关于Python解包知识点总结
2020/05/05 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
html5理解head_动力节点Java学院整理
2017/07/13 HTML / CSS
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
采购部长岗位职责
2014/06/13 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
捐资助学感谢信
2015/01/21 职场文书
2015年公司工作总结
2015/04/25 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
首次购房证明
2015/06/19 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
MySQL 时间类型的选择
2021/06/05 MySQL
Python实现科学占卜 让视频自动打码
2022/04/09 Python