我正在尝试实现一个系统,其中有两个客户端,其中一个发送消息,另一个接收它。
下面的图表可以更直观地解释:
因此,客户端1将消息发送到服务器(这部分已经成功),服务器收到“push”消息并发出一个“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一般还很新,所以一些机制对我来说仍然有些模糊,提前为我的初学者而道歉。:)
干杯
-k-
socket
将指向您收到消息的同一套接字。您可以尝试使用io.sockets.emit
代替吗? - pimvdb