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

时间:2013-04-25 07:38:51

标签: javascript node.js socket.io

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

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

socket.on("disconnect", function (){
  console.log("DISCONNECTED");
});
当有人关闭浏览器时,将打印“DISCONNECTED”。现在我的问题是,我怎么知道谁完全关闭了浏览器?没有数据传递给断开连接事件,所以我不确定我应该如何检查谁引发断开连接事件。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:4)

你可以这样做:

socket.on("disconnect", function (){
  console.log(this.id); // this.id is the 'id' of the socket that got disconnected
});

答案 1 :(得分:1)

你的问题毫无意义。每个套接字都是与单个客户端的连接。

以下是如何将名称与套接字关联,然后在同一套接字断开连接时打印相同的名称:

io.sockets.on('connection', function(socket) {
    var name = "";
    socket.on('set-name', function(_name) {
        name = _name;
    });
    socket.on("disconnect", function (){
        console.log("DISCONNECTED "+name);
    });
});

您已经知道哪个连接丢失,因为您持有连接对象socket

答案 2 :(得分:1)

基本上,一旦你监听'connect'事件,只要客户端连接到服务器,你就会得到一个套接字对象。 您可以将客户端信息存储到该套接字对象。 您可以参考这篇文章,并注意服务器端代码,其中编码器在服务器端使用pluarl形式'套接字'(因此服务器端将创建许多客户端套接字!)。 http://psitsmike.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...
});

和客户端

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
});

希望这会帮助你理解!