socket参数在socket.io/websocket的回调中意味着什么?

时间:2016-11-23 04:15:51

标签: websocket socket.io

socket.io示例代码中我们有这样的东西:(可能与其他websocket框架/库类似)

io.on('connection', function (socket) {
  io.emit('this', { will: 'be received by everyone'});

  socket.on('private message', function (from, msg) {
    console.log('I received a private message by ', from, ' saying ', msg);
  });

  socket.on('disconnect', function () {
    io.emit('user disconnected');
  });
});

但我不确定这个socket代表什么。它是最新连接的插座吗?

已更新

假设我使用了一个列表来存储具有不同id的套接字:

let list = {};

然后

import socketActions from './socketactions';

io.on('connection', function(socket) {
  return socketActions(socket, list);
}
socketactions.js中的

function socketActions(socket, list) {
      socket.id = Math.random();
      list[socket.id] = socket;

      socket.on('init', function(data) {
        // process data
      }

      socket.on('sendMsg', function(data) {
        // process data
      }
}

export {socketAction};

由于ID不同,列表中的套接字将不同,这意味着不同的用户连接。现在我的服务器中的某个地方我想要广播给网络中的其他用户:

for (const i in list) {
  const socket = list[i];
  socket.broadcast.emit('timeToDoSomething', handler);
}

现在列表中的套接字和我在io.on('connection', function(socket) {});中使用的套接字有什么区别?

1 个答案:

答案 0 :(得分:0)

  

现在列表中的套接字和   我在io.on中使用的套接字('connection',function(socket){});?

没有区别,它们包含相同的socket个对象。你的代码:

list[socket.id] = socket;

刚刚将socket对象保存到您自己的数据结构中,以便稍后通过list数据结构引用它。

注意 - 您不必像这样制作自己的套接字地图。 socket.io已经为你保留了一个。相反,您只需访问:

io.sockets.connected

随时。这是一张地图,其中id为关键字,socket为关键字。

// given an id, get a socket
let socket = io.sockets.connected[someSocketId];

// send a message to just that socket
socket.emit("hello");

此外,如果要向所有连接的套接字发送消息,可以使用:

io.emit('timeToDoSomething', data);

这将自动遍历所有连接的套接字,并向每个套接字发送相同的消息。