我正在使用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)
}
}
在这里,可以看到同一客户端的所有这些套接字:
我尝试从给定的userID
发送所有套接字的事件,但是,向客户端触发了多个事件,向用户显示了重复的数据。我还尝试将事件发送到最后一个套接字,但是,有时它可以工作,有时却不能。
有人知道在有多个客户端时如何唯一地标识套接字吗?