从零开始搭建node.js+xmlSocket的WEB聊天室(一)

一、一些基本思路

先说点废话,因为项目需要,要求做一个扩展性很强,性能又要好,花钱少,维护简单的全功能聊天室,类似新浪微秀或者是六间房这样的聊天室,顺便研究了一下现在主流的WEB聊天室技术。

现在一般的小型web聊天室的方案无非是ajax+http轮询或者http comet等,比如php开源项目phpfreechat的实现就是基于php+mysql+async ajax,我没有测试过性能,不过想来性能和容量也不会这么样,牛一点的专业聊天室更倾向使用socket解决方案,不过HTML5的推进速度太慢,目前基于WEB的Socket解决方案基本还是flash的天下,后端可能使用基于FMS(flash media server)或者免费开源的RED5,当然使用基于jabber协议的服务,比如ejabberdopenfire等更是大型架构需要考虑的方向,其中openfire比较完善,有针对flash的类库,还有java写的客户端,随便改改可以使用于多种地方。

其实多年前曾经用openfire+flash xmlsocket做过一个web聊天室,但是一旦并发用户超过200个,用户的login经常会出问题,并且频繁掉线,而且因为openfire有自己的用户认证系统,跟现有的网站的用户认证/session维护等还需要打通,反而变成了挺麻烦的一件事。

所以我决定抛弃FMS/RED5/Openfire,使用Flash xmlSocket + jQuery + Node.js来搭建一个轻量级但是性价比很高的web聊天室架子,使用node.js搭建socket server和flash策略服务器,使用flash xmlsocket连接socket server,使用jquery实现界面事件逻辑,免除了大量的flash界面设计,用户session由网站程序维护。

Node.js是一个Javascript运行环境,实际上它是对GoogleV8引擎(应用于Google Chrome浏览器)进行了封装,是一种“基于事件”的编程模式的实现。对熟悉ajax编程的同学是很容易入门的,关于Node.js的资料可以到官网查看。

整个聊天室主要有三部分逻辑程序:

1、后端node.js实现的socket server

2、前段flash xmlsocket封装的swf文件,作为socket client与socket server进行tcp连接;

3、前段jquery事件逻辑,主要是由flash xmlsocket里调用前段javascript函数。

其实还需要一个flash socket策略服务器监听在843端口上,这个我们在实现socket server的时候会顺便实现,因为这里只是一个demo聊天室,web网站部分,比如用户的登陆/注册等我这里就不实现了。

最后所有的源程序我会提供一个zip包下载。

此条目发表在 Node.js, WEB 分类目录,贴了 , , , , 标签。将固定链接加入收藏夹。

发表评论