基于javascript、ajax、memcache和PHP实现的简易在线聊天室

 更新时间:2015年02月03日 09:51:06   投稿:junjie  
这篇文章主要介绍了基于javascript、ajax、memcache和PHP实现的简易在线聊天室,需要的朋友可以参考下

在线聊天室(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。

脚本之家下载

https://github.com/hitoy/online-chatroom

系统需求:
1,安装有memcache
2,php安装memcache扩展
3,支持Javascript和ajax的现代浏览器

相关文章

  • 详解微信小程序中的页面代码中的模板的封装

    详解微信小程序中的页面代码中的模板的封装

    这篇文章主要介绍了详解微信小程序中的页面代码中的模板的封装的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-10-10
  • JS动态添加iframe的代码

    JS动态添加iframe的代码

    这篇文章主要介绍了JS动态添加iframe的代码,需要的朋友可以参考下
    2015-09-09
  • OpenLayer学习之自定义测量控件

    OpenLayer学习之自定义测量控件

    这篇文章主要为大家详细 介绍了OpenLayer学习之自定义测量控件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • Javascript动态创建div的方法

    Javascript动态创建div的方法

    这篇文章主要介绍了Javascript动态创建div的方法,是javascript节点操作的典型应用,非常具有实用价值,需要的朋友可以参考下
    2015-02-02
  • Bootstrap3学习笔记(二)之排版

    Bootstrap3学习笔记(二)之排版

    这篇文章主要介绍了Bootstrap3学习笔记(二)之排版的相关资料,非常具有参考价值,特此分享脚本之家平台,供大家参考
    2016-05-05
  • js的逻辑运算符 ||

    js的逻辑运算符 ||

    初次见到这样语句 a=a || [] 还有些纳闷,因为在其他语言中没见过有如此用法。
    2010-05-05
  • 使用swiper自定义分页点击跳转指定页面

    使用swiper自定义分页点击跳转指定页面

    这篇文章主要介绍了使用swiper自定义分页点击跳转指定页面方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 微信小程序跳转外部链接的详细实现方法

    微信小程序跳转外部链接的详细实现方法

    写这个是因为最近小程序的一个需求需要从小程序跳转到客户的官网,或者其他外部报名链接,下面这篇文章主要给大家介绍了关于微信小程序跳转外部链接的详细实现方法,需要的朋友可以参考下
    2022-10-10
  • 微信小程序表单验证插件WxValidate的二次封装功能(终极版)

    微信小程序表单验证插件WxValidate的二次封装功能(终极版)

    这篇文章主要介绍了微信小程序表单验证插件WxValidate的二次封装功能(终极版),文中给大家提到了最终版与前面2版的不同点,需要的朋友可以参考下
    2019-09-09
  • JScript中使用ADODB.Stream判断文件编码的代码

    JScript中使用ADODB.Stream判断文件编码的代码

    在实现TextStraem的时候,找到判断文件编码的代码是VBS的,但是在JScript中是没有ASC等函数的,也不能对二进制数据进行处理,因此需要通过一个特别的方法来获取文件开关的编码标识。
    2008-06-06

最新评论