socket.io的默认行为实际上是什么



我在客户端和服务器端都使用socket.io。这是一个很棒的库,但我必须说,文档中没有描述默认行为,这使得使用该库非常混乱。至少我没有找到任何默认行为的引用。

基本上,我看了教程,其中使用socket.io构建了一个基本的聊天应用程序。在教程中,服务器会自动向所有连接的客户端发送消息。这是服务器端的默认行为吗?

我对此不确定。我正在开发一个应用程序,用户可以(取消(订阅特定主题并从服务器接收值。假设我有两个主题(主题1和主题2(。我打开了两个客户端(客户端1和客户端2(,并从客户端1订阅了topic1。我注意到我在客户端1中收到了topic1的值1,但客户端2什么也没收到。

const io = require('socket.io')(3000); // create server
io.on('connection', socket => {
console.log("client is connected over sockets");
socket.on('subscribe', () => {socket.emit('send-msg', "send to client");})
});

在上述情况下,服务器将发送到所有客户端还是仅发送到一个客户端?socket.io的默认行为是什么?


PS:我注意到的关于socket.io的另一件事是,有很多方法可以做同样的事情,但它没有很好地记录下来。例如,我正在用socketIOClient函数实例化一个客户端:const socket = socketIOClient("my_host")。但我看过许多使用openSocket函数甚至直接使用io函数的教程(出于某种原因,作者在html<script defer src="http://localhost:3000/socket.io/socket.io.js"></script>中添加了这个(。

所有这些函数都做同样的事情,对吧?

您看到的是namespace.emitsocket.emit之间的区别。套接字是一个特定的连接,在其上发出事件只会将其发送到该连接。另一方面,名称空间是由几个套接字组成的组,在其上发出事件会将其发送到组中的每个套接字。默认情况下,整个io服务器是一个命名空间,因此io.emit(...)会向所有连接的客户端发送一条消息。您可以将套接字分组到任意的名称空间和文件室中,以便轻松地向选定的组发送消息。

最新更新