我試圖實現一個系統與兩個客戶端其中一個發送消息,另一個將收到它。 下圖將解釋它在一個更直觀的方式: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-
我對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