node的依赖包
node中实现Websocket的依赖包有很多,websocket、ws均可,本文选取ws来实现,首先安装依赖
聊天室实例
假如A,B,C,D用户均通过客户端连接到Websocket服务,其中每个人发的消息都需要将其通过Websocket转发给其他人,此场景类似于服务端将A的消息广播给组内其他用户。
服务端实现
首先来看服务端程序,具体的工作流程分以下几步:
- 创建一个WebSocketServer的服务,同时监听8080端口的连接请求。
- 每当有新的客户端连接该WebSocket成功时,便将该连接push到连接池的数组中。
- 监听message事件,当该事件发生时,遍历连接池,以连接为单位将该消息转发到对应的客户端
- 监听close事件,当该事件发生时,将该连接移出连接池
服务端代码
var clients = [];
wss.on('connection',function(ws) {
// 将该连接加入连接池
clients.push(ws);
ws.on('message',function(message) {
// 广播消息
clients.forEach(function(ws1){
if(ws1 !== ws) {
ws1.send(message);
}
})
});
ws.on('close',function(message) {
// 连接关闭时,将其移出连接池
clients = clients.filter(function(ws1){
return ws1 !== ws
})
});
});
客户端实现
ws.onopen = function (e) {
console.log('Connection to server opened');
}
ws.onmessage = function(event) {
console.log('Client received a message',event);
};
ws.onclose = function (e) {
console.log('connection closed.');
}
function sendMessage() {
ws.send(document.getElementById('text').value);
}