io.on(' connection',function(socket){})中的io.sockets.emit和socket.emit有什么区别?

时间:2017-12-08 09:24:27

标签: javascript node.js

我注意到我是否要发出像

这样的消息
io.on('connection', function(socket){
    socket.emit('signal')
})

不知何故,我必须刷新HTML页面才能让ejs文件处理信号。但如果我直接发出它像:

io.sockets.emit('signal')

然后我不必刷新html来使行动起作用。

怎么回事?

3 个答案:

答案 0 :(得分:1)

让我用简单的英语翻译代码。

第一个案例

io.on('connection', function(socket){
    socket.emit('signal')
})

翻译:当连接io时,指示触发connection事件的连接套接字发出'信号'。

在这种情况下,io附加了一个侦听“connection”事件的事件侦听器,只要socket连接到io,就会触发该事件。因此,只要socket连接到ioio就会指示socket发出“信号”事件。

为什么我需要刷新才能开火?

因为当您刷新时,您的计算机将充当socket并连接到io onload。因此,会触发“连接”事件,并且仅在socket连接到io时触发。

注意:实际上,需要刷新才能触发它。您只需断开互联网连接,然后重新连接即可。

第二种情况

io.sockets.emit('signal')

翻译:当前连接到io的所有套接字,现在发出'信号'事件!

在这种情况下,您指示所有当前连接的sockets发出“信号”事件。您的计算机socket已连接到io,因此会发出该事件。

注意:如果您有另一台设备连接到同一节点服务器,并且您使用该命令,您将看到发出两个“信号”事件。

答案 1 :(得分:0)

在第一种情况下,您正在等待“连接”事件。

刷新页面后,您将再次连接并最终解锁您的活动。

在第二种情况下,当您启动服务器时,该消息将发送给所有客户端。

答案 2 :(得分:0)

这里

io.on('connection', function(socket){
}

侦听传入套接字的连接事件。

如果您直接使用io.sockets.emit('signal'),那么您必须在连接时需要事件,因为它会检查是否建立了连接。