Array.find() 耗时太长,用户体验不好,node.js

问题描述 投票:0回答:1

这不是关于节点并发或事件循环的问题

我有一个问题,如何管理数千个用户通过套接字连接并通过 jswtoken 验证到 Node.js 服务器的场景。

假设有 10,000 到 50,000 个用户通过 Android 应用程序与 socket.io 客户端连接,当连接由 socket.io 建立并在断开连接时删除时,所有这些用户都被推送到一个数组中

users.push(newUser)
 没问题。

但是他们都想每 5 秒更新一次数组中各自对象上的 var

我可以通过

users.splice(id,1)

 使用 
user.id
 来识别它们各自的对象,但是需要很长时间。

在我的测试中

Array.prototype.find()

需要查找并更新X个用户:

    对于 1,000 个用户,2XXX.XX 毫秒(超过 2 秒)
  • 对于 10,000 个用户,4XXX.XX 毫秒(超过 4 秒)
  • 对于 25,000 个用户,3XXXX.XX 毫秒(超过 30 秒)
超过这 4 秒就无法保持实时体验。

有没有任何设计模式可以解决这个问题? 我有一些想法,但似乎没有一个是实用且可扩展的

    将当前使用的位置存储在客户端中(这不好,因为每次用户断开连接时,我都必须通知所有其他人索引是否已更改)
  1. 将用户分成最多 1000 个位置的多个数组,并将它们与另一个映射相关联,以直接在相对较小的数组上执行
  2. (mocha,chai)
     功能进行搜索。 (我不知道这是否是一个好的做法,但是识别用户的任务在服务器上转发,并且不需要太长时间)
  3. 完全放弃Node并寻找其他解决方案(我想保留在Node中)
android node.js performance socket.io user-experience
1个回答
0
投票
我认为这个问题没有简单的答案。在聊天/游戏/什么情况下同时拥有 10 000 - 50 000 名活跃用户?这是一个巨大的有效负载,我真的认为您的应用程序不必担心这种流量。

© www.soinside.com 2019 - 2024. All rights reserved.