socket.broadcast.emit работает неправильно - PullRequest
0 голосов
/ 11 ноября 2018

Узел создает уникальный URL и привязывает к нему socket.io.

var io = require("socket.io").listen(server, {path: req.originalUrl});

Когда клиент подключается, он также привязывает свой socket.io-client к этому URL

var socket = io('192.168.1.101:3000', {path: window.location.pathname});

У меня нет проблем, и все отлично работает.

Когда клиент выполняет определенное действие, сервер делает

socket.broadcast.emit("foo"); //I made console.log here and it prints

на стороне клиента:

socket.on("foo", () => console.log("okay"));

Проблема в том, что клиентское событие "foo" почти никогда не запускается. Иногда это происходит, но только в определенных случаях. Например, случилось так, что socket.io-client автоматически переподключается к серверу, а затем событие запускается.

Я не знаю, связана ли проблема с этим, потому что, например, работает socket.emit, но когда подключается другой клиент, я всегда получаю это ошибка

1 Ответ

0 голосов
/ 11 ноября 2018
socket.broadcast.emit("foo");

передает сообщение всем подключенным клиентам, КРОМЕ сообщения, указанного в socket.Если вы хотите транслировать сообщения всем подключенным клиентам, используйте:

io.broadcast.emit("foo");

Вам также необходимо убедиться, что ваши клиенты правильно подключены, а не регулярно теряют и восстанавливают свои подключения (выможно увидеть, происходит ли это, регистрируя события подключения и отключения на сервере).Если они каким-то образом теряют свои соединения, а затем снова подключаются, то какие из них получат широковещательное сообщение, зависит от того, какие из них не находились в середине временно потерянного соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...