Я создаю простую систему, такую как лента новостей в реальном времени, используя node.js + socket.io.
Поскольку это система "только для чтения", клиенты подключаются и получают данные, но клиенты фактически не отправляют какие-либо данные самостоятельно. Сервер генерирует сообщения, которые должны быть отправлены всем клиентам, ни один клиент не генерирует никаких сообщений; но мне нужно транслировать.
Документация для рассылки socket.io (конец страницы) говорит
Для трансляции просто добавьте флаг
broadcastв вызовы методовemitиsend. Вещание означает отправку сообщения всем остальным, кроме сокета, который его запускает.
Таким образом, я в настоящее время захватываю последнего клиента для подключения, в переменную, затем 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 });
});
В основном события, которые заставляют данные запрашивать отправку на клиент, являются серверными, а не клиентскими.