读书人

node+websocket 实时聊天范例

发布时间: 2013-02-19 11:11:40 作者: rapoo

node+websocket 实时聊天实例

最近,负责的游戏需要一个聊天功能,由于是实时的聊天,便想到了现在挺火的websocket,折腾了一天一夜,总算有点眉目了,现在总结如下:
websocket 是html5一个通信协议,可以实时通信。本例的聊天是用的socket的框架socket.io实现的,socket.io 集成了websocket和xhr-polling(长轮询)等多种通信方式
1.搭建node环境
从node官网,本人选择的window的msi 一键安装.安装完node 之后还需配置系统环境变量 PATH 属性里添加上你的测试地址路径. biu~ biu~

2.安装socket.io
用npm install-g socket.io 命令 或者从socket.io官网下载文件放到node_modules文件夹里面

3.服务端代码 server.js

view plaincopy to clipboardprint?
  1. /
  2. * modules引入
  3. */
  4. var express = require('express'),
  5. sio = require('socket.io'),
  6. fs=require('fs'),
  7. path = require('path')
  8. url = require('url');
  9. //=========================app配置=============================
  10. /**
  11. * app配置
  12. */
  13. var app = module.export = express.createServer();
  14. //=================配置socket.io=========================
  15. /**
  16. * 配置socket.io
  17. *
  18. */
  19. var io = sio.listen(app);
  20. // assuming io is the Socket.IO server object
  21. io.configure(function () {
  22. ///io.set("transports", ["websocket"]);
  23. });
  24. //===================socket链接监听=================
  25. /**
  26. * 开始socket链接监听
  27. * @param {Object} socket
  28. */
  29. io.sockets.on('connection', function (socket){
  30. //公共信息
  31. socket.on('public message',function(msg, fn){
  32. socket.broadcast.emit('public message',msg);
  33. fn(true);
  34. });
  35. //掉线,断开链接处理
  36. socket.on('disconnect', function(){
  37. socket.broadcast.emit('public message','</pre>
  38. <span style="color: red;">断开连接。。。</span>
  39. <pre class="javascript">');
  40. });
  41. });
  42. app.listen(3000, function(){
  43. var addr = app.address();
  44. console.log('app listening on http://127.0.0.1:' + addr.port);
  45. });

4.客户端代码 chat.html

view plaincopy to clipboardprint?
  1. <!--<script src="/js/jquery.js"></script>
  2. <script src="/js/socket.js"></script>--><script type="text/javascript">// <![CDATA[
  3. $(function(){
  4. var socket = io.connect('http://localhost:3000');
  5. //开始连接服务器
  6. socket.on('connect', function(){
  7. $('#connecting').fadeOut();
  8. show('连接服务器成功')
  9. });
  10. // 接收public message
  11. socket.on('public message', function(msg){
  12. show(msg);
  13. });
  14. $('#btn').click(function(){
  15. var msg = $('#content').val();
  16. // 发送公共消息 public message
  17. socket.emit('public message', msg, function(ok){
  18. if (ok) {
  19. show(msg);
  20. }
  21. });
  22. });
  23. });
  24. function show(msg){
  25. var htm ="
  26. <div class='message'>"+msg+"</div>
  27. ";
  28. $('#main').append(htm);
  29. }
  30. // ]]></script></pre>
  31. <div id="main">
  32. <div id="connecting">正在连接服务器..</div>
  33.  
  34. </div>
  35. <div id="send"><input id="content" type="text" /><button id="btn">发送</button></div>

5.先运行 服务端 命令:node server.js

node+websocket 实时聊天范例

客服端访问client.html地址比如 http://localhost/…/chat.html
下面 是 Firefox和chrome的结果
node+websocket 实时聊天范例node+websocket 实时聊天范例
ps:目前firebox不支持websocket协议,用的是xhr-polling ,chrome用的是标准的websocket协议
下面从node服务器截取的图片
node+websocket 实时聊天范例
现在websocket的标准还没确定,不同浏览器对握手协议支持的不同。 总之现在用websocket 是不推荐的,biu~biu~


更多原创文章 请关注我的博客 美公网天下

读书人网 >Web前端

热点推荐