io.emit vs socket.emit

我是socket.io的新手,并且遇到了一些看起来很奇怪的事情。 我实际上并不知道socket.emitio.emit之间的socket.emit ,但我无法在任何地方find解释。

 io.on('connection', function(socket){ io.emit('connected') // <<<< HERE >> socket.emit('connected'); socket.on('disconnect', function(){ io.emit('disconnect') }); socket.on('chat message', function(msg){ io.emit('chat message', msg); }); }); server.listen(3000); 

这是我的服务器的东西,但是当我更改iosocket该消息只有当连接的用户连接显示。 io.emit将消息发送给所有用户。

也许它应该是这样的,也许它只是一些可怕的黑客? 让我知道你是否需要客户端的HTML。

iovariables表示套接字组。 你已经在第一行开始了代码,在第二个参数中提供了一个函数,每次build立一个新的连接,都会给你一个socketvariables。 socketvariables仅用于与每个单独的连接进行通信。 您可能不会在代码中看到它,但每个build立的连接都会有一个socketvariables

这里有一个补充文档供参考。

 socket.emit('message', "this is a test"); //sending to sender-client only socket.broadcast.emit('message', "this is a test"); //sending to all clients except sender socket.broadcast.to('game').emit('message', 'nice game'); //sending to all clients in 'game' room(channel) except sender socket.to('game').emit('message', 'enjoy the game'); //sending to sender client, only if they are in 'game' room(channel) socket.broadcast.to(socketid).emit('message', 'for your eyes only'); //sending to individual socketid io.emit('message', "this is a test"); //sending to all clients, include sender io.in('game').emit('message', 'cool game'); //sending to all clients in 'game' room(channel), include sender io.of('myNamespace').emit('message', 'gg'); //sending to all clients in namespace 'myNamespace', include sender socket.emit(); //send to all connected clients socket.broadcast.emit(); //send to all connected clients except the one that sent the message socket.on(); //event listener, can be called on client to execute on server io.sockets.socket(); //for emiting to specific clients io.sockets.emit(); //send to all connected clients (same as socket.emit) io.sockets.on() ; //initial connection from a client. 

希望这可以帮助!。