Я использую Socket.io для подключения клиента React к серверу Node.js и параметр query
в socket.io для уникальной идентификации каждого нового клиента. Однако сервер создает несколько сокетов для каждого клиента, и, когда мне нужно что-то отправить с сервера, я не знаю, какой сокет использовать, потому что у меня их несколько, и все они подключены.
Код клиента:
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
, однако, несколько событий инициируются клиентом, показывая дублированные данные пользователю. Я также пытался отправить события в последний сокет, но иногда это работает, иногда нет.
Кто-то знает, как однозначно идентифицировать сокет при наличии нескольких клиентов?