我注意到我是否要发出像
这样的消息io.on('connection', function(socket){
socket.emit('signal')
})
不知何故,我必须刷新HTML页面才能让ejs文件处理信号。但如果我直接发出它像:
io.sockets.emit('signal')
然后我不必刷新html来使行动起作用。
怎么回事?
答案 0 :(得分:1)
让我用简单的英语翻译代码。
第一个案例
io.on('connection', function(socket){
socket.emit('signal')
})
翻译:当连接io
时,指示触发connection
事件的连接套接字发出'信号'。
在这种情况下,io
附加了一个侦听“connection”事件的事件侦听器,只要socket
连接到io
,就会触发该事件。因此,只要socket
连接到io
,io
就会指示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'),那么您必须在连接时需要事件,因为它会检查是否建立了连接。