Sto costruendo un sistema semplice come un news feed in tempo reale, usando node.js + socket.io.node.js + socket.io trasmesso dal server, piuttosto che da un client specifico?
Poiché questo è un sistema di "sola lettura", i client si connettono e ricevono i dati, ma i client non inviano mai dati personali. Il server genera i messaggi che devono essere inviati a tutti i client, nessun client genera alcun messaggio; ma ho bisogno di trasmettere.
Il documentation for socket.io's broadcast (fine della pagina) dice
per trasmettere, è sufficiente aggiungere un flag
broadcast
peremit
esend
chiamate di metodo. Trasmissione significa inviare un messaggio a tutti tranne che al socket che lo avvia.
Così ho attualmente catturare il cliente più recente per la connessione, in una variabile, quindi emit()
a quella presa ebroadcast.emit()
a quella presa, in modo tale che questo nuovo client ottiene i nuovi dati e tutti gli altri clienti . Ma sembra che il ruolo del cliente qui non sia altro che una soluzione per ciò che pensavo che socket.io già supportasse.
C'è un modo per inviare dati a tutti i client in base a un evento avviato dal server?
Il mio approccio attuale è più o meno:
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 });
});
Fondamentalmente gli eventi che causano i dati di richiedere l'invio al cliente sono tutti sul lato server, non sul lato client.
Quando ho provato ho ricevuto un errore che 'io.sockets.emit' non è una funzione definita. – d11wtq
Funziona per me: P, quale versione di socket io stai utilizzando – user482594
Hmm, sembra che io abbia effettivamente provato 'io.sockets.broadcast.emit()', il mio male, sembra funzionare! – d11wtq