標籤:
剛學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
文章來源:使用node.js和socket.io實現多人聊天室
使用node.js和socket.io實現多人聊天室