node.js + socket.io транслируется с сервера, а не от конкретного клиента?

Я создаю простую систему, например, новостную ленту в реальном времени, используя 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 });
});

В основном события, которые вызывают необходимость отправки данных на все клиенты находятся на стороне сервера, а не на стороне клиента.

14
задан d11wtq 21 December 2011 в 11:12
поделиться