клиент socket.io не получает сообщения от сервера - PullRequest
29 голосов
/ 23 марта 2012

Я пытаюсь внедрить систему с двумя клиентами, один из которых отправляет сообщение, а другой должен его получить.Рисунок ниже объяснит это более наглядно:

socket.io message communication chart

Итак, клиент 1 отправляет сообщение на сервер (и это работает), сервер получает «push»«message» и выдает «pop» сообщение, которое должно быть принято клиентом 2. Проблема здесь в том, что клиент 2 никогда не получает «pop» сообщение.: (

Вот код для всех них.

SERVER.JS

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

app.listen(999);

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' });
    });
});

КЛИЕНТ 1 (он же mobile.html))

<html>
    <head>
        <title>
            Mobile
        </title>
        <script src="/socket.io/socket.io.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/mootools/1.4.5/mootools-yui-compressed.js" type="text/javascript"></script>
        <script>
          var socket = io.connect('http://localhost:999');
        </script>
    </head>
    <body>
        <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' });
                });
            });
        </script>
    </body>
</html>

КЛИЕНТ 2 (он же web.html)

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

Я просто не могу понять причину, по которой Клиент 2 не получает "pop ", я совершенно новичок в socket.io и node.js в целом, поэтому некоторые механики для меня все еще немного неясны, поэтому я заранее извиняюсь за свою нелюбовь.:)

cheers

-k-

Ответы [ 2 ]

16 голосов
/ 23 марта 2012

Функция, переданная в .on, вызывается для каждого сокета, чтобы выполнить инициализацию (события привязки и т. Д.), А socket ссылается на этот текущий сокет.Это будет клиент 1, когда вы получите сообщение push, потому что функция-обработчик связана с событием push этого socket - вы связали эту функцию, когда клиент 1 подключен (где socket относится к клиенту 1).

io.sockets относится ко всем подключенным сокетам, включая клиента 2 в вашем случае.

14 голосов
/ 23 марта 2012

Другим аспектом, который вы могли бы принять во внимание, является использование:

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

, которое по сути отправляет сообщение всем подключенным клиентам, за исключением того, который создал сообщение.Устранение задачи фильтрации клиентов / сокращения ненужного трафика на исходный сокет.

Socket.IO на GitHub - Под трансляцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...