Buduję prosty system, taki jak kanał informacyjny w czasie rzeczywistym, używając node.js + socket.io.node.js + socket.io jest transmitowane z serwera, a nie z konkretnego klienta?
Ponieważ jest to system "tylko do odczytu", klienci łączą się i odbierają dane, ale klienci nigdy nie wysyłają żadnych własnych danych. Serwer generuje komunikaty, które należy wysłać do wszystkich klientów, żaden klient nie generuje żadnych komunikatów; ale muszę nadawać.
documentation for socket.io's broadcast (koniec strony) mówi
Aby nadawać, wystarczy dodać
broadcast
flagęemit
isend
wywołań metod. Nadawanie oznacza wysyłanie wiadomości do wszystkich osób poza gniazdem, które je uruchamia.
więc obecnie uchwycić najnowszego klienta, aby połączyć, do zmiennej, a następnie emit()
do tego gniazda ibroadcast.emit()
do tego gniazda, tak że ten nowy klient dostaje nowe dane i wszystkich innych klientów . Ale wygląda na to, że rola klienta tutaj jest niczym więcej niż obejściem tego, co uważałem już za obsługiwane przez socket.io.
Czy istnieje sposób przesyłania danych do wszystkich klientów na podstawie zdarzenia zainicjowanego przez serwer?
Moje obecne podejście jest grubsza:
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 });
});
Zasadniczo zdarzenia, które powodują dane wymagają wysyłania do klienta są po stronie serwera, a nie po stronie klienta.
Kiedy spróbowałem, dostałem błąd, że 'io.sockets.emit' nie jest zdefiniowaną funkcją. – d11wtq
To działa dla mnie: P, jaka wersja gniazda io używasz – user482594
Hmm, wydaje się, że faktycznie wypróbowałem 'io.sockets.broadcast.emit()', moje złe, to wydaje się działać! – d11wtq