基于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,超强推荐base.js
Dec 23 Javascript
载入jQuery库的最佳方法详细说明及实现代码
Dec 28 Javascript
js动态删除div元素基本思路及实现代码
May 08 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
Jul 05 Javascript
Vue实现购物车功能
Apr 27 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
May 22 Javascript
angularjs实现分页和搜索功能
Jan 03 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
Aug 31 Javascript
koa2+vue实现登陆及登录状态判断
Aug 15 Javascript
继承行为在 ES5 与 ES6 中的区别详解
Dec 24 Javascript
uniapp与webview之间的相互传值的实现
Jun 29 Javascript
Javascript中的奇葩知识,你知道吗?
Jan 25 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内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
php中json_decode()和json_encode()的使用方法
2012/06/04 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
2015/08/20 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
js前端对于大量数据的展示方式及处理方法
2020/12/02 Javascript
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
TensorFlow高效读取数据的方法示例
2018/02/06 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
详解HTML5中div和section以及article的区别
2015/07/14 HTML / CSS
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
三星英国官网:Samsung英国
2018/09/25 全球购物
医院护士求职自荐信格式
2013/09/21 职场文书
甲方资料员岗位职责
2013/12/13 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
一个都不能少观后感
2015/06/04 职场文书
自荐信大全
2019/03/21 职场文书