socket.io客户端不接收来自服务器的消息
我试图实现一个系统与两个客户端其中一个发送消息,另一个将收到它。 下图将解释它在一个更直观的方式:socket.io客户端不接收来自服务器的消息
因此,客户端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' });
});
});
CLIENT 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 (aka 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这样一些机制来我还是有点晦涩,所以我提前为我的noobness道歉。 :)
欢呼
-K-
传递给.on
的函数被调用每个插座做初始化(绑定事件等),并socket
指的是目前的插座。当您收到push
消息时,这将是客户端1,因为处理函数绑定到socket
的push
事件 - 当客户端1连接(socket
引用客户端1)时,您绑定了该函数。
io.sockets
指的是所有连接的套接字,所以包括客户端2在你的情况下。
它的工作原理一个魅力,感谢吨:) – holographix 2012-03-23 11:38:40
,你可以考虑的另一个方面是使用的:
socket.broadcast.emit('push', { hello: 'world' });
这将基本上将消息发送给所有连接的客户端,除了发起该消息中的一个。删除过滤客户端的任务/减少不必要的流量到始发套接字。
Socket.IO on GitHub - 在广播下。
这也是有趣的,但现在我需要跟踪我的客户,我需要传达的信息,以确定的客户端,所以我管理了另一种解决方案,但这可能派上用场为了未来,谢谢! – holographix 2012-03-23 12:08:27
你,先生,值得赞赏。经过8个小时的尝试,没有结果,它对我很有帮助! – mozcelikors 2017-10-28 15:11:23
我对socket.io没有经验,但是如果我没有弄错'socket'会引用你收到消息的同一个套接字。你可以试试'io.sockets.emit'吗? – pimvdb 2012-03-23 11:01:38
工程就像一个魅力!如果你想作出回答,我可以把它标记为正确的,并让你+1 :) – holographix 2012-03-23 11:04:06
+1对于一个有趣的问题问得好,并格式化 – beny23 2012-03-23 11:27:16