2011-08-09 19 views
1

在socket.io 0.6,我有以下示例代碼:Socket.io 0.7不能調用broadcast.send?

var io = require('/usr/lib/node_modules/socket.io'); 
var server = http.createServer(function(req,res){ 
     var path = url.parse(req.url).pathname; 
     switch(path){ 
      .... 
      //core codes 
      socket.broadcast(data); 
     } 
}).listen(8080); 

// ... ... 

var socket = io.listen(server); 

,一切都不錯。

但是現在我已經將socket.io更新爲0.7,並將socket.broadcast更改爲socket.sockets.broadcast.send(data);

有個例外:無法調用'undefined'的發送?

誰能告訴我如何在不聽某個事件的情況下將數據發送給每個人?

也許這裏有一個辦法:

clients = new Array(); 
socket.on('connection',function(socket){ clients.push(socket);} 
// ... 
for(s in clients) s.send(data); 
// ... 

它真的需要做這樣的方式?

謝謝!

+1

只是一個旁註:不要使用(中)遍歷數組,使用(;;)代替。 –

+0

是的,我做到了!但還有什麼想法? – benyu

回答

2

在socket.io 0.7你這樣做:

io.sockets.send() // broadcasts to all connected users 
io.sockets.json.send() // broadcasts JSON to all connected users 
io.sockets.emit('eventname') // broadcasts and emit 

或命名空間

io.of('/namespace').send('msg'); // broadcast to all connect users in /namespace 
+0

爲什麼不打電話直播? – benyu

+0

由於廣播方法不存在於'io.sockets'或'io.of('/ namespace')'上,我們想要明確區分'socket.broadcast'(廣播到所有連接的套接字,除!當前套接字)和'io.socket.send',將其發送給所有用戶,沒有任何例外。 – 3rdEden

0

你可以做

var io = require('socket.io').listen(80); 
io.sockets.on('connection', function (socket) { 
    socket.broadcast.emit('user connected'); 
}); 
+0

我不認爲他是正確的方式。它應該是''io.on('connection')''(或''socket.on''或''sioServer.on'')或任何返回值''require('socket.io')。 ''被調用)。 –

+0

代碼片段來自socket.io網站 - 這絕對是對的。 – pkyeck

+0

是的,我在使用名稱空間時感到困惑,因爲語法有點不同。 Sry基因! –

0

使用

sioServer.sockets.on('connection', function (client) { 
    client.broadcast.send('Hello, Everybody else!'); 
}); 

廣播到所有其他連接的客戶端(即除廣播client本人),並使用

sioServer.sockets.on('connection', function (client) { 
    sioServer.sockets.send('Hello, Everybody!'); 
}); 

播出給大家(包括client自己)。

+0

不,我不想聽事件!該消息是由curl通過php發佈的,並直接發送給每個客戶端! – benyu

+0

第二個示例也將在Express/Connect路徑內或基本上位於代碼中的任何其他位置。 –