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

socket.io命名空间限制及其缩放方法

周越泽
2023-03-14

我有socket.io应用程序,必须处理大量的名称空间。我想知道socket.io实例可以处理的名称空间的数量限制是多少,如果我创建10k个名称空间,会不会有什么问题。我如何进行伸缩以跨多个socket.io实例(例如,每个实例处理1K名称)进行类似scharding的操作。实际上,我可以伸缩以支持多个用户,但我的所有实例必须处理所有名称空间。

更新1:

我试图解决的问题是以下,我有一个多人纸牌游戏(如扑克)和每个房间,其中有4个玩家玩游戏,是由socketio命名空间建模。因为我预计有数千个并发播放器,所以我的socketio实例应该处理这个数量的名称空间。我已经实现了socket.io网站中解释的可伸缩性解决方案。当我向外扩展时,我会在新实例中运行这个节点片段,以便它可以处理以前创建的所有名称空间。

rooms.forEach(function(room){
    var socketRoom = io.of('/room/' + room.id)
    .on('connection', function(mySocket){
        return handleTableSocket(mySocket, socketRoom, room);
    });
});

那么用socketio命名空间为每个游戏室建模是个好主意吗?如果名称空间的数量增加了怎么办?

干杯

共有1个答案

邓英卓
2023-03-14

io中的名称空间只是一个Javascript对象,还有一个主对象维护所有现有名称空间对象的索引。除了ndoe.js进程中Javascript对象及其实例数据所消耗的内存量之外,对于可以拥有多少内存没有固有的限制。看来,创建所需名称空间的数量并测量它们的内存消耗的快速测试是很好的第一步。

您可以通过部署多个Node.js进程来扩展Node.js中的Socket.io。这里的socket.io站点(使用多个节点)讨论了一般概念。这种通用方案通过使用redis来管理希望在多个实例之间共享的数据来工作。此方案不为特定实例上的特定用户创建首选项。如果您想做类似的事情,以便在每个实例中只有一些名称空间,那么这可能可以通过自定义编码来完成,但您必须解释更多关于您试图解决的问题,以便我们对如何解决这个问题有更多的想法。

同样,如果您分享了您试图解决的实际问题(而不仅仅是您尝试的解决方案),我们可能会通过使用您自己的数据结构来提出一个比10K实际名称空间更有效的解决方案,这些数据结构比一般名称空间更针对您的特定问题。

 类似资料:
  • 问题内容: 我正在研究nodejs / socket.io的实时聊天,并且需要一些有关实施会议室的建议。 使用名称空间或使用房间功能来完全隔离颤抖的对方,哪个更好? 房间和名称空间之间真正的技术区别是什么? 资源使用方面有区别吗? 问题答案: 这是名称空间和房间 的共同点 (socket.io v0.9.8-请注意,v1.0涉及完整的重写,因此情况可能有所更改): 命名空间(io.of(’/ ns

  • 问题内容: 我有一个Node.js Web服务器,该服务器在顶部运行套接字服务器,该服务器是使用Socket.io创建的。基本上,这可行。 我现在想要实现的是将连接的客户端按组进行群集。所以可能有一些客户从而弥补了A组和其他一些客户从而弥补了B组,他们将选择哪个组由他们一adressing特定的URL,无论是属于或。 现在,在Socket.io中,我希望将消息发送到A组中的所有客户端或B组中的所有

  • 问题内容: 假设服务器获得了10,000个并发连接(通过socket.io)。太多了,如果它再也处理不了,我需要启动另一台服务器。 如何将两个服务器及其socket.io同步? 问题答案: 您可以尝试使用例如群集模块并将负载分配到多个内核(如果您有多核CPU)。如果这还不够,您可以尝试使用反向代理在多个服务器之间分配请求,并将Redis作为中央会话数据存储(如果您的方案可行)。

  • 关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变化。 “内部模块”现在称做“命名空间”。 “外部模块”现在则简称为“模块”,这是为了与ECMAScript 2015里的术语保持一致,(也就是说 module X { 相当于现在推荐的写法 namespace X {)。 这篇文章描述了如何在TypeScript里使用命名空间(之前叫做“内部模块”)来组织你的代码

  • Let the word of Christ dwell in you richly in all wisdom; teaching and admonishing one another in psalms and hymns and spiritual songs, singing with grrace in your hearts tto the Lord. And whatsoever

  • 客户端有许多“命名空间”,通常是一些公开的可管理功能。命名空间对应 Elasticsearch 中各种可管理的 endpoint。下面是全部的命名空间: **命名空间** **功能** `indices()` 索引数据统计和显示索引信息 `nodes()` 节点数据统计和显示节点信息 `cluster()` 集群数据统计和显示集群信息 `snapshot()` 对集群和索引进行拍摄快照或恢复数据