先看我的WebSocket服务器端代码:
![3d252f15bf1d39c50f698b278bd4c7a2.png](https://i-blog.csdnimg.cn/blog_migrate/b241418d5c95e6a87172442354bdfa65.jpeg)
socket.on('disconnect', function(){
console.log("disconnect event detected, client is probably not there");
eventEmitter.emit('close',socket);
});
一旦客户端比如浏览器主动断开连接,服务器实现扑捉disconnect的事件,然后抛给服务器端应用实现。
服务器端应用实现响应这个事件,调用服务器的析构例程,把该客户端对应的套接字从套接字池里移除:
![fb30a0987b4997cdbe91117e921faaa4.png](https://i-blog.csdnimg.cn/blog_migrate/e85a299f34f4a819b0c57f9598ee6427.jpeg)
移除实现:
![9593081214d121f75e93690518b0c869.png](https://i-blog.csdnimg.cn/blog_migrate/7cf4d394ffb8efb12b6909e18706f22d.jpeg)
function disconnectFromGivenClient(disconnectedSocket){
console.log("before destruction, client size: " + clients.length);
clients = clients.filter(function(item) {
return item !== disconnectedSocket
});
console.log("after destruction, client size: " + clients.length);
}
运行时测试效果:
![a1d2d426f65b4a859e43e62266f271e6.png](https://i-blog.csdnimg.cn/blog_migrate/39c881c9c0eac31d6c51450138f532c0.jpeg)