gpt4 book ai didi

javascript - Socket.io & Redis - 适合 io 游戏的架构?

转载 作者:行者123 更新时间:2023-12-04 17:19:29 25 4
gpt4 key购买 nike

我正在使用基本的 NodeJS 使用 缩放Redis 架构,但我在配置它以适应实时多人游戏时遇到了麻烦。
我的多人游戏应该有单独的大厅 - 所以当负载平衡器将用户放置在单独的服务器中时,同一大厅中的玩家无法进行通信,除非我使用 Redis .问题是,我不能在服务器之间来回发送每一个 Action ,因为这会重载 Redis ,以及破坏服务器实例的可扩展性,因为现在我必须将每个用户存储在每个 NodeJS 实例中(以检查冲突等),这违背了扩展的目的。除非我做错了什么?
基本 NodeJS/Redis 架构 (对于带有大厅的 io 游戏来说效率低下?)
enter image description here
我还添加了一个单独的运行 经理 它配置(创建/删除大厅)大厅,并通过 Redis 将信息发送到 Worker 实例,以便用户可以查看可用的大厅
我曾想过让每个 NodeJS 实例成为一个单独的大厅,但负载均衡器不是这样工作的。此外,没有自动缩放。
我当前的架构,展示玩家(用户)
enter image description hereRed是给用户的Light Pink用于通过 Redis 从其他服务器同步用户到自身(否则,来自其他实例的玩家将不会相互可见。此外,将无法执行简单的更新,例如碰撞检测)
每个玩家都是自己选择的lobby ,并且是一个拥有 X 的对象, Y , angle , 和其他几个参数
即使用户会加入 Worker 2Worker 'n' ,我仍然需要将用户配置文件转发给其他工作人员,否则不同的用户 Worker ,他们不会是 可见 彼此。现在在这种情况下,它是不是完全违背了缩放的目的?
要么我做错了什么,要么我确定必须有解决方案!
编辑
到目前为止,这是我自己想出来的,尽管不确定它是否合理
enter image description here
我几乎没有得到任何帮助,将不胜感激一些评论

最佳答案

发表评论作为答案
根据评论,游戏是在团队之间进行的,每个团队都有一些成员,但游戏中的每个成员都必须了解其他成员(不仅是他们的团队成员),因为每个成员都必须了解游戏中的所有其他成员,很高兴采用这种设计。
尽管应该在游戏级别进行隔离,但每个游戏都应该有自己的一组大厅,每个大厅都包含所有玩家。
我们不必为每个 Lobby 运行 worker,而是一个 worker 可以用于一场游戏,这将更新所有 Lobby 数据。
此外,Loadbalancer 不应用于在工作人员之间分配玩家,而应在应用程序中使用中间件(如 GamePlayerManager/LobbyPlayerManager)来向/从特定大厅添加/删除玩家。

关于javascript - Socket.io & Redis - 适合 io 游戏的架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67122133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com