在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) {});
中使用的套接字有什么区别?
答案 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);
这将自动遍历所有连接的套接字,并向每个套接字发送相同的消息。