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