Node Js、websockets 保存通道中的连接

Posted

技术标签:

【中文标题】Node Js、websockets 保存通道中的连接【英文标题】:Node Js, websockets save connections in channels 【发布时间】:2016-02-08 21:09:33 【问题描述】:

您好,我正在使用带有 node js 服务器的 websockets,npm 模块是 ws。我有一个数组,我保存了所有的连接,但现在我必须将它们分开,所以我做了这样的多维数组:

users[channel1][user_id1] = ws_user_id1_connection

问题是当我在多个频道中有 1 个用户时:

users[channel1][user_id1] = ws_user_id1_connection
users[channel2][user_id1] = ws_user_id1_connection
users[channel3][user_id1] = ws_user_id1_connection

从性能的角度来看,这样可以吗?或者我可以通过其他方式来实现这一点?如果我这样离开它,是用户[channel1]、users[channel2]、users[channel3],它们将仅引用 ws_user_id1_connection。我的意思是当我创建新用户 [channelNew] 时,它不会添加有关 ws_user_id1_connection 的所有数据,而只是引用它。想法是我希望有一些东西作为房间/频道,并且在每个频道中都有一些连接的用户,这样他们就可以互相交谈。那是正确的方法吗?提前谢谢你。

【问题讨论】:

【参考方案1】:

假设channel1 是聊天室,user_id1 是聊天室中的用户ID,那么是的,这是实现它的好方法,您不应该为每个频道创建不同的ws。您只需要在发送的数据中添加一些信息,以便客户端知道与消息相关的房间是什么,例如:


  'room': 'channel1',
  'from': 'otherUser_id',
  'msg': 'some text message'

我建议不要使用channel 来推荐房间,因为它可能与ws 频道混淆。我还会更改变量“users”的名称,因为它不引用用户,我会留下它:rooms[room_id1][user_id1] = ws_user_id1_connection

另外,您可能想查看Socket.io,它是一个为此类应用程序设计的优秀 Nodejs 库。

【讨论】:

以上是关于Node Js、websockets 保存通道中的连接的主要内容,如果未能解决你的问题,请参考以下文章

Coinex WebSocket 市场深度通道有时不发送消息移除价格水平

node.js 还是其他?关于websocket的一些问题[关闭]

受祝福的服务器(Node.js)通过 websocket 到浏览器中的 Xterm.js 客户端

Node.JS、Socket.IO 和集群中的 WebSocket 握手不起作用

对于实时 node.js 消息传递应用程序,如果没有 Heroku 中的 websockets,我会获得相同的功能吗?

如何将活动WebSocket传递给Node.js中的集群线程?