Estoy construyendo un sistema simple como un servicio de noticias en tiempo real, usando node.js + socket.io.node.js + socket.io transmitido desde el servidor, en lugar de desde un cliente específico?
Dado que este es un sistema de "solo lectura", los clientes se conectan y reciben datos, pero los clientes nunca envían ningún dato propio. El servidor genera los mensajes que deben enviarse a todos los clientes, ningún cliente genera ningún mensaje; sin embargo, necesito transmitir.
El documentation for socket.io's broadcast (al final de la página) dice
para transmitir, basta con añadir una bandera
broadcast
aemit
ysend
llamadas a métodos. La radiodifusión significa enviar un mensaje a todos los demás, excepto el conector que lo inicia.
Así que actualmente capturan el cliente más reciente para conectar, en una variable, entonces emit()
a ese socket ybroadcast.emit()
a la toma de corriente, de tal manera que este nuevo cliente obtiene los nuevos datos y todos los otros clientes . Pero parece que el rol del cliente aquí no es más que una solución para lo que pensé que socket.io ya soportaba.
¿Hay alguna manera de enviar datos a todos los clientes basándose en un evento iniciado por el servidor?
Mi enfoque actual es más o menos:
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 });
});
Básicamente los eventos que causan a los datos requieren el envío al cliente son todos del lado del servidor, no del lado del cliente.
Cuando lo intenté recibí el error de que 'io.sockets.emit' no es una función definida. – d11wtq
Funciona para mí: P, ¿qué versión de socket io estás usando – user482594
Hmm, parece que en realidad probé 'io.sockets.broadcast.emit()', mi mal, ¡parece que funciona! – d11wtq