基于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获取当前屏幕的高度宽度的实现代码
Jul 12 Javascript
利用JS判断用户是否上网(连接网络)
Dec 23 Javascript
javascript实现微信分享
Dec 23 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
Apr 15 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
Dec 03 Javascript
ES6所改良的javascript“缺陷”问题
Aug 23 Javascript
JQuery 获取多个select标签option的text内容(实例)
Sep 07 jQuery
vue router学习之动态路由和嵌套路由详解
Sep 21 Javascript
详解JavaScript的变量
Apr 04 Javascript
vue实现鼠标经过动画
Oct 16 Javascript
vue 实现 rem 布局或vw 布局的方法
Nov 13 Javascript
JS中箭头函数与this的写法和理解
Jan 14 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
重置版游戏视频
2020/04/09 魔兽争霸
php URL编码解码函数代码
2009/03/10 PHP
PHP array_multisort()函数的使用札记
2011/07/03 PHP
基于Zookeeper的使用详解
2013/05/02 PHP
thinkPHP3.2.2框架行为扩展及demo示例
2018/06/19 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
javascript parseInt与Number函数的区别
2010/01/21 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
python进阶教程之文本文件的读取和写入
2014/08/29 Python
python实现的简单窗口倒计时界面实例
2015/05/05 Python
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
JSONLINT:python的json数据验证库实例解析
2017/11/28 Python
Python中property函数用法实例分析
2018/06/04 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
Django中modelform组件实例用法总结
2020/02/10 Python
python绘制动态曲线教程
2020/02/24 Python
Python通过len函数返回对象长度
2020/10/22 Python
python 高阶函数简单介绍
2021/02/19 Python
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
毕业生自荐信
2013/12/14 职场文书
家具促销活动方案
2014/02/16 职场文书
毕业生就业推荐表自我鉴定
2014/03/20 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
公司档案管理制度
2015/08/05 职场文书
JavaScript 原型与原型链详情
2021/11/02 Javascript