Socket.IO - 如何找出谁断开连接?

Ben*_*erg 4 javascript node.js socket.io

我正在前端使用 HTML5 和 Javascript,在后端使用 Node.js 构建简单的 Web 应用程序。我还使用 Socket.IO 在客户端和服务器之间来回传递数据。假设我有一个聊天页面,每个人都可以登录并加入聊天室。我在后端跟踪聊天室中的所有人。我想要做的是,如果一个人退出该房间,则将其从该房间中移出。例如,假设有人关闭了浏览器,他们不应该再显示为活动用户。

Socket.IO 有一个断开连接事件,这似乎是执行此操作的完美工具。例如,当我运行此代码时:

socket.on("disconnect", function (){
  console.log("DISCONNECTED");
});
Run Code Online (Sandbox Code Playgroud)

当有人关闭浏览器时,将打印“DISCONNECTED”。现在我的问题是,我如何知道到底是谁关闭了该浏览器?没有数据传递给断开连接事件,因此我不确定应该如何准确检查谁引发了断开连接事件。任何帮助将不胜感激!

Her*_*lme 5

基本上,一旦监听“connect”事件,只要客户端连接到服务器,您就会获得一个套接字对象。您可以将客户端信息存储到该套接字对象。您可以参考这篇文章,并注意服务器端代码,其中编码器在服务器端使用 pluarl 形式的“套接字”(因此服务器端将创建许多客户端套接字!)。 http://psismike.com/2011/10/node-js-and-socket-io-multiroom-chat-tutorial/

希望以下示例对您有所帮助。

//server side
var io = require('socket.io').listen(80)
// sockets here, not socket
io.sockets.on('connection', function(socket){
  // every connection will create a socket
  socket.on('newUser', function(name){
    socket.id = name; // socket stores the username
  });
  socket.on('disconnect', function(){
    console.log(socket.id); // retrieve it from socket object
  });
  // more functionality goes...
});
Run Code Online (Sandbox Code Playgroud)

和客户端

var socket = io.connect('http://localhost:80');
socket.on('connect', function(){
   //emit newUser event so that client info is stored
  socket.emit('newUser', prompt('Please enter your name!'));
  //.... more functionality goes
});
Run Code Online (Sandbox Code Playgroud)

希望这能帮助您理解!