Javascript 客户端上的socket.io如何侦听服务器发出的事件?

Javascript 客户端上的socket.io如何侦听服务器发出的事件?,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我的客户端有以下代码: btn.addEventListener('click', function(){ socket.emit('chat',{ message: message.value, handle: handle.value }); }); 所以我想我理解上面的内容。当单击事件发生时,运行回调函数。在回调函数中,让套接字向服务器发出此“chat”事件。随着事件套接字的发出,传递JSON数据 现在,在服务器端,我们有: var io

我的客户端有以下代码:

btn.addEventListener('click', function(){
    socket.emit('chat',{
        message: message.value,
        handle: handle.value
    });
});
所以我想我理解上面的内容。当单击事件发生时,运行回调函数。在回调函数中,让套接字向服务器发出此“chat”事件。随着事件套接字的发出,传递JSON数据

现在,在服务器端,我们有:

var io = socket(server);

io.on('connection', function(socket){    
    socket.on('chat', function(data){
        io.emit('chat', data);  
    });
});
我想我也明白这一点。将套接字绑定到此服务器。然后收听连接事件。调用该事件时,socket.io(将神奇地?)将套接字对象传递给我们的函数。然后,我们听我们所有的插座聊天。按照客户端的定义,将从聊天室发出的数据发送回所有套接字

socket.on('chat', function(data){
     // do cool stuff
})
同样在上面的示例中,我们让客户端在服务器端侦听事件


我的问题是,事件如何“传递”到客户端?这是某种本机Javascript功能吗?我想知道更多关于后端发生的事情

事件通过WebSocket传递到服务器。它是从浏览器到服务器的tcp连接。连接是全双工的,这意味着服务器可以向客户端发送实时数据,反之亦然

在前端代码中,您应该有类似于

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io();
</script>

var socket=io();
此代码要求服务器使用web套接字进行tcp连接。一旦浏览器通过WebSocket连接到服务器,socket.io就可以通过连接将事件发送到服务器

连接事件中传递的套接字只是前端连接时创建的任何套接字的引用。套接字获取唯一的id,通过该引用,您可以与web浏览器客户端实时通信

如果您想深入了解web套接字,我建议您阅读本文


Afaik客户端打开一个。这样,服务器可以随时发送数据。