繁体   English   中英

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

[英]what is actually the default behavior of socket.io?

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

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

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

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(...)向所有连接的客户端发送一条消息。 您可以将套接字分组到任意命名空间和房间中,以便轻松地向选定的组发送消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM