当前位置: 首页 > 知识库问答 >
问题:

通过Socket.io实现WebSockets的设计模式

白嘉志
2023-03-14

我正在构建一个复杂的聊天应用程序,使用WebSockets。我使用Node.js的socket.io库来实现协议。我应该为每个聊天创建单独的命名空间,还是为每个聊天创建单独的房间?

socket.io中名称空间和房间的主要区别是什么?

共有1个答案

赫连瑾瑜
2023-03-14

通常,如果所有客户都属于同一类型,则使用房间。

如果有不同类型的客户端,请使用名称空间。例如,匿名用户和经过身份验证的用户。在这种情况下,可能需要以不同的方式处理传入的连接请求。

var guest = io.of('/guest');
guest.on('connection', function(socket) {
   console.log('A guest client connected');
});

var user = io.of('/user');
user.on('connection', function(socket) {
   var authenticated = authenticate(); //authenticate the user
   if (!authenticated) {
      // log attempt and disconnect the client
   }
});
 类似资料:
  • 我计划开发一个基于web的聊天应用程序,它接收ReSTful请求,将它们转换为XMPP,并将它们发送到XMPP服务器。 在这种基于聊天的应用程序中使用WebSocket看起来很有希望,因为事件(或响应)可以异步传递。但是,如果我使用WebSocket作为从浏览器传输请求的底层协议,这仍然可以被视为ReSTful设计吗?如果是的话,URI、动词(GET、POST…)是怎样的,websocket消息中

  • 问题内容: 当与socket.io握手时,是否可以轻松地传递身份验证cookie?我目前必须分别进行操作,如下所示: 问题答案: WebSockets确实支持cookie,因为它们是基于HTTP的,但是快速浏览Socket.IO的源代码显示不支持此内置。 因此,在这种情况下,直接使用cookie并不是可行的解决方案,而且,由于您使用的是Socket.IO,因此不能保证用户实际上会通过WebSock

  • 问题内容: 我在通过带有node.js和socket.io的WebSocket流MP3数据时遇到问题。一切似乎都可以正常工作,但是解码音频数据对我来说并不公平。 这是我的玩具服务器: 客户端以字符串类型接收数据,但我想将数据提供给解码音频数据,看来它不喜欢字符串。调用encodeAudioData会导致以下错误消息: 我认为解码音频数据需要存储在ArrayBuffer中的数据。有没有办法转换数据?

  • 问题内容: 这是关于管道实施的设计问题。以下是我的幼稚实现。 管道中各个步骤/阶段的接口: 管道中的步骤/阶段的具体实现: 管道类将保存/注册管道中的步骤,并一个接一个地执行它们: Diver程序执行管道: 但是,您可以看到,幼稚的实现有很多限制。 主要要求之一是,由于要求每个步骤的输出可以是任何类型,因此朴素的实现不是类型安全的(Pipeline类中的execute方法)。如果我碰巧错误地连接了

  • 我在将nginx配置为代理WebSockets时遇到了一些麻烦。我有一个Node.js应用程序,它使用Socket.io V0.9.16侦听端口9090上的连接,使用nginx V1.6.2侦听端口9000上的连接,并且(应该)配置为将请求代理到我的Node.js应用程序。nginx配置如下所示: 这可能是安全问题吗?浏览器是否以某种方式“知道”Socket.io在端口9090上运行,并拒绝通过9

  • 问题内容: 我一直在玩Socket.io,node.js和WebSockets,所有这些我都可以通过wifi连接正常工作。 但是,当我通过3G连接(例如在我的iPhone上)测试支持WebSocket的应用程序时,似乎只能回退到长时间轮询了。 使用Socket.io之前,连接失败并显示“ WebSocket连接无效或未验证原点”,然后退回长时间轮询。 我不知道WebSockets是否可以在3G上工