2011-09-20 30 views
7

Estoy jugando con socket.io y node.js, y me preguntaba cómo lograr lo siguiente: Tengo un formulario simple que envía una cadena de texto al servidor, y el servidor lo envía de vuelta, y se agrega a un div. lo que me gustaría hacer es tener esa actualización div para todos los usuarios en todos los navegadores, actualmente solo actualiza la que se envió desde el mensaje.Enviando mensajes a todos los navegadores con socket io

código de app.js (Node.JS servidor):

io.sockets.on('connection', function(socket) { 
    socket.on('send_message', function(data) { 
    data.message = data.message + ' yo<br/>'; 
    socket.emit('get_message',data); 
    }); 
}); 

código en el lado del cliente:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script> 
    <script src="/socket.io/socket.io.js"></script> 
    <script> 
    $(document).ready(function() { 
    var socket = io.connect('http://localhost:3000'); 

    $('#sender').live('click',function() { 
      var user_message = $('#message_box').val() 
      socket.emit('send_message',{message: user_message}); 
    }); 

    socket.on('get_message', function(data) { 
     $('#data').append(data.message); 
     }); 
    }); 
</script> 

y el html:

<div id='data'></div> 
<input type='text' id='message_box' placeholder='send message'> 
<button id='sender'>Send Message</button> 

¿Qué debería estar haciendo para enviar mensajes a múltiples navegadores?

Respuesta

23

Cambio

socket.emit('get_message',data); 

Para

socket.broadcast.emit('get_message',data); 

Para difundir a todos los usuarios conectados, excepto a la toma en la que está llamando la emisión sucesivamente.

Si también desea incluir ese socket que puede hacer

io.sockets.emit('get_message', data); 
Cuestiones relacionadas