¿Por qué mi aplicación Socket.io Express solo envía al cliente del 'remitente'?
Pregunta
Estoy intentando escribir una aplicación de chat básica con Node.js (Express) y Socket.io.Todo 'parece' estar funcionando, pero mi servidor de socket parece estar solo 'enviando' el mensaje al remitente original.Aquí está mi código de socket:
var client = io.listen(app);
client.sockets.on('connection', function (socket) {
socket.on('message', function (data) {
console.log(data);
socket.send(data);
});
});
Y aquí está mi código del lado del cliente:
$(document).ready(function() {
var socket = new io.connect('http://localhost:3000');
socket.on('connect', function() {
socket.send('A client connected.');
});
socket.on('message', function(message) {
$('#messages').html('<p>' + message + '</p>' + $('#messages').html());
console.log(socket);
});
$('input').keydown(function(event) {
if(event.keyCode === 13) {
socket.send($('input').val());
$('input').val('');
}
});
});
Se agradece la ayuda.
Solución
Utilice client.sockets.emit
en lugar de socket.emit
.Emitirá a cada cliente conectado (difusión), utilizando el objeto socket solo se envía al cliente específico.
Otros consejos
Del lado del servidor, creo que quieres:
socket.broadcast.emit(data);
en lugar de:
socket.send(data);
Consulte "Mensajes de difusión" en la parte inferior de la página "Cómo usar" .:)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow