Я создаю простую систему, например, новостную ленту в реальном времени, используя node.js + socket .io.
Поскольку это система «только для чтения», клиенты подключаются и получают данные, но на самом деле клиенты никогда не отправляют свои собственные данные. Сервер генерирует сообщения, которые необходимо отправить всем клиентам, ни один клиент не генерирует никаких сообщений; все же мне нужно транслировать.
В документации для широковещательной передачи socket.io (конец страницы) сказано
Для широковещательной передачи просто добавьте флаг
широковещания
вemit
и] отправить
вызовов методов. Широковещательная передача означает отправку сообщения всем, кроме сокета, который его запускает.
В настоящее время я записываю самого последнего клиента для подключения в переменную, затем emit ()
в этот сокет и broadcast.emit ()
в этот сокет, таким образом, что этот новый клиент получает новые данные и все остальные клиенты. Но похоже, что роль клиента здесь - не что иное, как обходной путь для того, что, как я думал, socket.io уже поддерживает.
Есть ли способ отправить данные всем клиентам на основе события , инициированного сервером ?
Мой текущий подход примерно такой:
var socket;
io.sockets.on("connection", function (s) {
socket = s;
});
/* bunch of real logic, yadda yadda ... */
myServerSideNewsFeed.onNewEntry(function (msg) {
socket.emit("msg", { "msg" : msg });
socket.broadcast.emit("msg", { "msg" : msg });
});
В основном события, которые вызывают необходимость отправки данных на все клиенты находятся на стороне сервера, а не на стороне клиента.