剛學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);
四、效果圖
五、源碼下載
ps:
1、在命令行運行
node main.js
然后在瀏覽器中打開index.html,如果瀏覽器(ff、Chrome)不支持,請升級到支持WebSocket的版本.
2、推薦node.js的IDE WebStorm