用node.js和Websocket来做个多人聊天室吧
发布于 3年前 作者 auzll 11174 次浏览

初学node.js和html5的相关技术(node方面大部分都是在cnodejs.org上面看技术文章学到的),想着学以致用,于是基于node.js和websocket来做了一个多人聊天室:

一、功能简介
1、用户随意输入一个昵称即可登录
2、登录成功后
1) 对正在登录用户来说,罗列所有在线用户列表,罗列最近的历史聊天记录
2) 对已登录的用户来说,通知有新用户进入房间,更新在线用户列表
3、退出登录
1) 目前未支持直接退出,只能通过关闭网页来退出…
2) 当有用户退出,其他所有在线用户会收到信息,通知又用户退出房间,同时更新在线用户列表
4、聊天
1) 聊天就是广播,把信息广播给所有连接在线的用户
5、一些出错处理
1) 暂时简单处理了系统逻辑错误、网络出错等特殊情况的出错提示

二、技术简介
1、node方面主要是基于node-websocket-server这个框架;服务器和客户端用JSON数据来通讯;
2、其他的就不多说了,直接贴上这个小demo的源码地址: https://github.com/auzll/nodechat 。有兴趣的可以看看,欢迎各位网友批评指正。

三、参考文章
1、websocket与node.js的完美结合( http://cnodejs.org/blog/?p=273 ) 。从这里了解到node-websocket-server 这个框架的,一个node.js和websocket通讯的框架,本程序中有使用到。
2、nodejs: 真正的一份代码,到处运行( http://cnodejs.org/blog/?p=702 ) 。从这里了解到如何在svr和client中同时复用部分代码,当然,本程序也模仿了这里面的技术来做,例如我源码里面svr/chatLib.js其实是同时被svr和client公用的。

四、附带几张效果图
1、 进入源码目录,svr/Main.js,执行node Main.js来启动

2、 输入昵称

3、 聊天主界面

4、 聊天主界面之“后登陆用户查看历史消息”

14 回复

我想问一下,用户的唯一标识UUID是如何创建的呢?
数据存储是用什么呢?

为什么我运行不起来这个例子呢 ?
我安装 express 的项目都能跑起来。。
但是这个项目,我node Main.js 后,启动起来后,,我访问
http://ip:9800/index.html 却访问不到页面 ?

请教,这个为什么呢?

未来nodejs在websocket方面会成为重头戏

最近也做了个这样的聊天室,然后升级成了一个你画我猜的游戏,可惜还找不到支持websocket的免费服务器

客户端在打开web/index.html网页,而不是在浏览器中输出localhost:9800

我在windows下面用node.exe运行 提示我 process.stdout.flush(); 这个错误 说WriteStream has no method flush 这是怎么回事? 是缺少什么包吗?

chromium 18 chrome 出现无法连接服务器的问题 onopen事件 无法执行 这是怎么回事 浏览器的问题吗?我看了node-websocket-server的源码 他使用的75的标准 我在网上查到chrome貌似更新到76了 我修改node-websocket-server的源码让他使用76标准 同样无法运行.有谁能用chrome 运行起这个例子吗?教教我 谢了

我的chrome版本:15.0.874.121 m ,实现了draft10标准以后,整个系统能够跑起来,但有一个奇怪的问题,就是chat.js里在onopen以后,连续send了3个消息(login,list_user,list_history),这三个请求如果不间断的发送,会导致错误,错误的原因是发送的json格式出错,也就是未能正确的发送消息,但如果在其中插入alert的话,是可以正确发送3个消息。在node-websocket-server提供的chat实例里,也试过在onopen事件触发的时候连续发送多条消息,都会出现错误。不知哪位高人能给出一下解释?

我使用的0.6.6 Node.js,在Linux下运行
process.stdout.flush();
^
TypeError: Object # has no method ‘flush’
at /root/jasper/monsocket/lib/ws/connection.js:43:22
at new Connection (/root/jasper/monsocket/lib/ws/connection.js:82:5)
at Server. (/root/jasper/monsocket/lib/ws/server.js:65:7)
at Server.emit (events.js:88:20)
at Socket. (http.js:1389:14)
at TCP.onread (net.js:348:27)

我的websocket 本地跑没问题,放NAE上也是能跑起来的,可是外面却连不上websocket服务器,为什么?

L我也是这个问题,求指导~

请教一下node Main.js以后怎么访问工程里面的html?我不管怎么访问 页面都显示No Implemeted.

点击“进入聊天室”没有反应啊,话说chatroom.htm里面也的button也没有绑定点击事件啊。。。怎么破

能不能控制只有经过验证的用户可以建立连接呢,类似与只有登录的用户才能建立websocket

回到顶部