使用node.js和socket.io實現多人聊天室


剛學node.js,想着做點東西練練手。網上的東西多而雜,走了不少彎路,花了一天時間在調代碼上。參考網上的一篇文章,重寫了部分代碼,原來的是基於基於node-websocket-server框架的,我沒用框架,單單是socket.io。

一、基本功能

1、用戶隨意輸入一個昵稱即可登錄
2、登錄成功后
1) 對正在登錄用戶來說,羅列所有在線用戶列表,羅列最近的歷史聊天記錄
2) 對已登錄的用戶來說,通知有新用戶進入房間,更新在線用戶列表
3、退出登錄
1)支持直接退出
2) 當有用戶退出,其他所有在線用戶會收到信息,通知又用戶退出房間,同時更新在線用戶列表
4、聊天
1) 聊天就是廣播,把信息廣播給所有連接在線的用戶
5、一些出錯處理
1) 暫時簡單處理了系統邏輯錯誤、網絡出錯等特殊情況的出錯提示

問題:功能不完善,有bug(退出后,新用戶重新登錄,還是原來的用戶) 。抽空完善吧

二、技術介紹

socket.io(官網:http://socket.io/)是一個跨平台,多種連接方式自動切換,做即時通訊方面的開發很方便,而且能和expressjs提供的傳統請求方式很好的結合,即可以在同一個域名,同一個端口提供兩種連接方式:request/response, websocket(flashsocket,ajax…)。

這篇文章對socket.io的使用做了詳細介紹:http://www.cnblogs.com/dxy1982/archive/2012/01/30/2328020.html

《用node.js和Websocket做個多人聊天室吧》http://www.html5china.com/HTML5features/WebSocket/20111206_3096.html

三、注意事項

(1)客戶端這樣引用socket.io.js:

<script src="/socket.io/socket.io.js"></script>

可能會加載失敗(我在這里耗了不少時間)

可以改為:

<script src="http://ip:port/socket.io/socket.io.js"></script>

(對應服務器的ip地址和端口號,比如說localhost和80端口)

(2)實現廣播的時候,參考官網的寫法,竟然不起作用,如:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.broadcast.emit('user connected');
  socket.broadcast.json.send({ a: 'message' });
});

后來看了這個:http://stackoverflow.com/questions/7352164/update-all-clients-using-socket-io

改為以下才起作用:

io.sockets.emit('users_count', clients);

四、效果圖

五、源碼下載

  Nodejs多人聊天室

ps:

1、在命令行運行

node main.js

然后在瀏覽器中打開index.html,如果瀏覽器(ff、Chrome)不支持,請升級到支持WebSocket的版本.

2、推薦node.js的IDE WebStorm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM