ham*_*u92 1 scalability node.js socket.io
我有 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);
});
});
Run Code Online (Sandbox Code Playgroud)
那么用socketio命名空间对每个游戏室建模是个好主意吗?如果命名空间的数量增加怎么办?
干杯
socket.io 中的命名空间只是一个 Javascript 对象,并且有一个主对象维护所有现有命名空间对象的索引。除了 ndoe.js 进程中 Javascript 对象及其实例数据消耗的内存量之外,您可以拥有的内存数量没有固有的限制。似乎创建所需的命名空间数量并测量它们的内存消耗的快速测试将是一个很好的第一步。
您可以通过部署多个 node.js 进程在 node.js 中扩展 socket.io。在 socket.io 站点(使用多个节点)上讨论了一般概念。该通用方案通过使用 redis 来管理想要在多个实例之间共享的数据。此方案不会为特定实例上的特定用户创建首选项。如果你想做这样的事情,为了在每个实例中只有一些命名空间,那么这可能可以通过自定义编码来完成,但你必须解释更多关于你试图解决的问题我们对如何解决这个问题有很多想法。
同样,如果您分享了您试图解决的实际问题(而不仅仅是您尝试的解决方案),我们可能会提出一个比 10k 实际命名空间更有效的解决方案,方法是使用您自己的数据结构,这些数据结构更针对您的比通用命名空间更具体的问题。
| 归档时间: |
|
| 查看次数: |
1461 次 |
| 最近记录: |