在实时聊天应用中,除了消息收发,及时感知用户的上线与下线同样关键。本节将展示如何利用 WebSocket 协议实现这一功能,包括服务端的状态广播和客户端的界面响应。
服务端基于 nodejs-websocket 构建,监听指定端口并维护连接列表。当新连接进入时,我们绑定文本事件来处理昵称设置和聊天消息,同时监听关闭事件以发送离开提示。注意变量名 boardcast 已修正为 broadcast,且 HTML 中的 span1/span2 标签已更正为标准 span 元素,以确保兼容性。
下面是服务端的核心逻辑,重点在于 conn.on("close") 的处理,确保断开时能通知所有人。
/** * 服务端 */
/** * 1 将 nodejs-websock 包引进来 */
var ws = require("nodejs-websocket");
/** * 2 创建一个 WebSocket 服务,建立 TCP 连接,* conn 就是连进来的连接 * server 监听 2333 端口 */
var server = ws.createServer(function(conn) {
console.log("New connection"); // 表示新的连接进来了
/** * conn 绑一个 text 事件,并接受一个回调 */
conn.on("text", function(str) {
console.log(str); // 给客户端返回信息
var data = JSON.parse(str);
switch (data.type) {
case "setname":
conn.nickname = data.name;
broadcast(JSON.stringify({ name: "Server", text: data.name + "加入了房间" }));
break;
case "chat":
(.({ : conn., : data., : }));
;
:
;
}
});
conn.(, () {
(.({ : , : conn. + }));
});
conn.(, () {
.(err);
});
}).();
() {
server..(() {
conn.(str);
});
}


