client not receiving messages from server

I'm trying to implement a system with two clients one of them sends a message and the other one shall receive it. The figure below will explain it in a more visual way: message communication chart

So, the client 1 send the message to the server (and this works), the server receives a "push" message and emits a "pop" message that should be picked up by Client 2. The problem here is that Client 2 never receives the "pop" message. :(

Here's the code for all of them.


var app = require('express').createServer()
  , io = require('').listen(app);


app.get('/webclient', function (req, res) {
    res.sendfile(__dirname + '/web.html');

app.get('/mobile', function (req, res) {
    res.sendfile(__dirname + '/mobile.html');

io.sockets.on('connection', function (socket) {
//      socket.emit('pop', { hello: 'world' });
    socket.on('push', function (data) {
        console.log('push received, emitting a pop');
        socket.emit('pop', { hello: 'world' });

CLIENT 1 ( aka mobile.html )

        <script src="/"></script>
        <script src="" type="text/javascript"></script>
          var socket = io.connect('http://localhost:999');
        <input type="button" name="act" id="push" value="message" />
        <script type="text/javascript" charset="utf-8">
            window.addEvent('domready', function() {
                $('push').addEvent('click', function() { 
                    socket.emit('push', { hello: 'world' });

CLIENT 2 (aka web.html)

<script src  = "/"></script>
  var socket = io.connect('http://localhost:999');
  socket.on('pop', function (data) {

I just cannot understand the reason why Client 2 does not receive the "pop" message, I'm quite new to and node.js in general so some mechanics to me are still a bit obscure, so I apologize in advance for my noobness. :)



The function passed to .on is called for each socket to do the initialization (binding events etc), and socket refers to that current socket. This will be client 1 when you receive a push message, because the handler function is bound to the push event of that socket - you bound that function when client 1 connected (where socket refers to client 1).

io.sockets refers to all sockets connected, so including client 2 in your case.

Another aspect which you could take into consideration is the use of :

socket.broadcast.emit('push', { hello: 'world' });

Which would essentially send the message to all the connected clients except the one that originated the message. Removing the task of filtering clients/reducing unnecessary traffic to the originating socket.

Socket.IO on GitHub - Under broadcasting.