Socket.io使1个客户端的多个连接的套接字保持活动状态

时间:2019-04-04 20:34:33

标签: node.js sockets socket.io

我正在使用Socket.io将React客户端连接到Node.js服务器,并使用socket.io中的query选项唯一地标识每个新客户端。但是,服务器为每个客户端创建了多个套接字,当我需要从服务器发送消息时,我不知道使用哪个套接字,因为我有多个套接字,并且所有套接字都已连接。

客户端代码:

import io from "socket.io-client";
...
const socket = io(process.env.REACT_APP_API_URL + '?userID=' + userID, { forceNew: true });

socket.on('connect', () => {
        socket.on('new-order', data => {
            const { add_notification } = this.props;
            add_notification(data);
        });

服务器代码:

....
server = http
        .createServer(app)
        .listen(8080, () => console.log(env + ' Server listening on port 8080'));
io = socketIo(server);

io.on('connection', socket => {
    const userID = socket.handshake.query.userID;
    socket.on('disconnect', () => {
        socket.removeAllListeners();
    });
});

这里是向客户端发出事件的服务器端:

for (const socketID in io.sockets.connected) {
    const socket = io.sockets.connected[socketID];
    if (socket.handshake.query.userID === userID) {
        // Here, I find more than one socket for the same condition, always connected.
        socket.emit(event, data)
    }
}

在这里,可以看到同一客户端的所有这些套接字:

enter image description here

我尝试从给定的userID发送所有套接字的事件,但是,向客户端触发了多个事件,向用户显示了重复的数据。我还尝试将事件发送到最后一个套接字,但是,有时它可以工作,有时却不能。

有人知道在有多个客户端时如何唯一地标识套接字吗?

0 个答案:

没有答案