Я новичок в nodejs и экспериментировал с socket.io. Я пытаюсь отправить сообщение в определенные сокеты, поэтому я думал, что буду хранить ссылки на сокет.Ссылка на сокет в Socket.IO
var controls = {};
var clients = {};
var control = io
.of("/control")
.on("connection", function(socket){
socket.on("connect_player", function(data){
var id = data.screen_id;
controls[socket.id] = id;
});
socket.on("msg", function(data){
id = controls[socket.id]
player.socket(clients[id]).emit("msg", data);
});
});
var player = io
.of("/player")
.on("connection", function(socket){
socket.on("set_id", function(id){
clients[id] = socket.id
});
});
я сначала начать веб-страницы, который подключается к «игрок» пространства имен и отображает идентификатор (жестко). Затем другая веб-страница, которая соединяется с пространством имен «control» с тем же идентификатором, что и игрок, теперь контроллер должен иметь возможность отправлять сообщения этому конкретному игроку, но это работает некоторое время, а затем сбой.
В течение периода, когда он работает, я могу отправлять сообщения с управляющей страницы на определенную страницу игрока.
Я просмотрел идентификаторы сокетов в пространстве имен проигрывателя после того, как он прекратил работать, и обнаружил, что идентификаторы сокетов отличаются от исходных.
Я думаю, что я что-то делаю неправильно или неправильно понимаю понятия. Как я могу исправить эту проблему.
изменение:
Я добавил слушатель для «воссоединиться» события и обнаружил, что значение socket.id изменений после каждый, «восстановить» событие. Таким образом, элементы управления и клиенты имеют недопустимые значения socket.id, которые приводят к моей проблеме. Есть ли это, чтобы преодолеть это.
Я отредактировал мой вопрос. Проблема, с которой я столкнулась, связана с тем, что я использую socket.id как ссылку, которая, кажется, меняется после повторного подключения. – Josnidhin
Точно. Вот почему я советую не использовать его. Для каждого клиента определите и установите свой собственный идентификатор и используйте комнаты для поддержки личных сообщений. – freakish
По моему опыту, вы должны использовать RedisStore для использования функции «Комната». Поскольку Socket.io использует подписку Redis, функцию отмены подписки для реализации «Room» – InspiredJW