2011-08-09 5 views
1

dans socket.io 0.6, j'ai code suivant exemple:Socket.io 0.7 ne peut pas appeler 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); 

et tout va bien. Mais maintenant j'ai renouveler le socket.io à 0.7 et ai changé le socket.broadcast à socket.sockets.broadcast.send (données); Vous avez une exception: impossible d'appeler send de 'undefined'?

Qui peut me dire comment puis-je envoyer des données à tout le monde sans écouter un certain événement?

Peut-être ici est une façon:

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

est-il vraiment nécessaire de faire comme de cette façon?

Merci!

+1

Juste un sidenote: N'utiliser pour (en) pour itérer sur les tableaux, utiliser (;;) au lieu . –

+0

Oui, je le fais! mais quelle autre idée? – benyu

Répondre

2

En socket.io 0.7 vous:

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 

ou espaces de noms

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

Pourquoi ne pas appeler la diffusion? – benyu

+0

Parce que la méthode de diffusion n'existe pas sur 'io.sockets' ou' io.of ('/ namespace') 'et nous voulions faire une distinction claire entre' socket.broadcast' (qui diffuse à toutes les sockets connectées, sauf ! le socket courant) et 'io.socket.send' qui l'envoie à tous les utilisateurs, sans aucune exception. – 3rdEden

0

vous pouvez juste faire

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

Je ne pense pas que c'est la bonne façon. Il devrait être '' io.on ('connection') '' (ou '' socket.on''' ou '' sioServer.on'' ou quelle que soit la valeur retournée de '' require ('socket.io'). '' est appelé). –

+0

l'extrait de code provient du site Web socket.io - c'est tout à fait vrai. – pkyeck

+0

Ouais, j'ai été confondu avec lors de l'utilisation des espaces de noms, puisque la syntaxe diffère un peu alors. Sry! –

0

Utilisez

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

pour diffuser à tous les autres clients connectés (qui est, sauf la diffusion client lui-même) et d'utiliser

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

à diffuser à tout le monde (y compris client lui-même).

+0

Non, je ne veux pas écouter sur événement! le message a été posté à partir de curl par php et envoyé directement à chaque client seulement! – benyu

+0

Le second exemple fonctionnera aussi à l'intérieur d'un chemin Express/Connect ou, fondamentalement, n'importe où ailleurs dans votre code. –

Questions connexes