如果您不想(或不能)使用某种会话存储,并希望使用相同的user_id将消息发送到多个套接字,则可以存储以user_id为键并将socket数组作为值的映射
var socketMap = {};
Run Code Online (Sandbox Code Playgroud)
并使用握手数据存储对套接字的引用
io.sockets.on('connection', function (socket) {
var userId = socket.handshake.userId;
if(!socketMap[userId]) socketMap[userId] = [];
socketMap[userId].push(socket);
});
Run Code Online (Sandbox Code Playgroud)
或者使用一些正常的事件数据
socket.on('auth', function(data) {
var userId = data.userId;
var authToken = data.authToken;
... // verify the data...
if(!socketMap[userId]) socketMap[userId] = [];
socketMap[userId].push(socket);
});
Run Code Online (Sandbox Code Playgroud)
当你想要一个套接字列表发送消息时
var sockets = socketMap['some_user_id'];
Run Code Online (Sandbox Code Playgroud)