初学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、 聊天主界面之“后登陆用户查看历史消息”
为什么我运行不起来这个例子呢 ?
我安装 express 的项目都能跑起来。。
但是这个项目,我node Main.js 后,启动起来后,,我访问
http://ip:9800/index.html 却访问不到页面 ?
请教,这个为什么呢?
我在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)