socket.io 客户端未从服务器接收消息

Posted

技术标签:

【中文标题】socket.io 客户端未从服务器接收消息【英文标题】:socket.io client not receiving messages from server 【发布时间】:2012-04-07 22:36:38 【问题描述】:

我正在尝试实现一个具有两个客户端的系统,其中一个发送消息,另一个将接收它。 下图会更直观的解释一下:

因此,客户端 1 将消息发送到服务器(这有效),服务器接收到“推送”消息并发出应由客户端 2 接收的“弹出”消息。 这里的问题是客户端 2 从未收到“弹出”消息。 :(

这是所有这些的代码。

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 没有收到“弹出”消息的原因, 一般来说,我对 socket.io 和 node.js 还是很陌生,所以一些机制对我来说仍然有点模糊,所以我提前为我的菜鸟道歉。 :)

干杯

-k-

【问题讨论】:

我对 socket.io 没有经验,但如果我没记错的话,socket 将指的是您收到消息的同一个套接字。你可以试试io.sockets.emit 吗? 就像一个魅力!如果您想回答,我可以将其标记为正确并给您 +1 :) +1 提出了一个有趣的问题并且格式正确 谢谢,我很高兴它对其他人有帮助:) 【参考方案1】:

为每个套接字调用传递给.on 的函数以进行初始化(绑定事件等),socket 指的是当前套接字。当您收到 push 消息时,这将是客户端 1,因为处理程序函数绑定到该 socketpush 事件 - 您在客户端 1 连接时绑定了该函数(其中 socket 指的是客户端 1) .

io.sockets 指的是所有已连接的套接字,因此在您的情况下包括客户端 2。

【讨论】:

我不明白,什么像魅力?编辑是什么? 这只是一个解释,以消除 socketio.sockets 之间的混淆。【参考方案2】:

您可以考虑的另一个方面是使用:

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

这实际上会将消息发送到所有连接的客户端,但发起消息的客户端除外。删除过滤客户端/减少到原始套接字的不必要流量的任务。

Socket.IO on GitHub - 广播中。

【讨论】:

这也很有趣,但是现在我需要跟踪我的客户,并且我需要将消息传递给确定的客户,所以我管理了另一个解决方案,但这可能会派上用场未来,谢谢!! 您,先生,值得一票。经过 8 小时的尝试没有结果,它对我很有用!!

以上是关于socket.io 客户端未从服务器接收消息的主要内容,如果未能解决你的问题,请参考以下文章

python socket.io客户端无法接收广播消息

Node.js 到 C++ 客户端:未从 socket.emit 接收消息

socket.io:客户端将所有传入消息接收到单个函数中

从 socket.io 收到消息时从客户端播放音频 - node.js

socket.io 没有发送给所有客户端

利用 socket.io 实现消息实时推送