gpt4 book ai didi

node.js - 根据条件将流量路由到多个 Node 服务器

转载 作者:太空宇宙 更新时间:2023-11-03 21:49:55 25 4
gpt4 key购买 nike

我正在使用 Nodejs 和 HTML5 编写一个在线多人游戏,我希望有多个 map 供人们玩,但我遇到了缩放问题。我运行它的服务器本身无法支持多个 map 的游戏循环,即使它有 4 个核心,我也只能使用一个具有单 Node 进程的核心。

我希望能够扩展它,甚至不一定限于单个服务器。我希望能够为游戏中的每个 map 启动一个 Node 进程,然后有一个主进程来查找玩家所在的 map 并将其连接传递到正确的子进程以进行处理和更新游戏信息等

我找到了几种使用像 nginx 这样的代理或内置 Node 集群来进行负载平衡的方法,但从我所看到的示例来看,我只给出了与下一个可用进程的连接,并且我需要专门把它们分发出去。有什么方法可以让我根据这样的条件将连接路由到 Node 进程吗?我目前正在使用 Express 来提供静态内容,并使用 socket.io 来进行客户端到服务器的通信。玩家所在 map 的信息将与其余玩家数据一起存储在 MongoDB 中(如果有影响的话)。

最佳答案

解决您的问题的方法有很多,根据您的描述,这里有两个建议。

1 - 使用路由器服务器,它将玩家查询分派(dispatch)到“区域服务器”:在此拓扑中,所有客户端查询都将到达您的路由服务器,服务器用唯一的 ID 标记每个查询并将其分派(dispatch)到正确的区域服务器,区域服务器处理查询并将其发送回路由服务器,路由服务器将从唯一标记中识别查询并将响应发送回客户端。

此解决方案将调度 CPU/内存负载,但不会调度带宽!

2 - 使用身份验证服务器将客户端重定向到负载较少的服务器:在这种情况下,您将拥有多个相同的服务器和一个身份验证服务器,当客户端进行身份验证时,发送可用服务器的 url 和身份验证 token 到客户端以及到服务器的身份验证票证。然后客户端连接到服务器,服务器将使用 auth toekn/auth 票证进行识别。

此解决方案将调度所有 CPU/内存/带宽,但可能并不适合所有游戏,因为每次连接您都可能被发送到不同的服务器,并且如果您不在同一区域,您将看不到同一区域的玩家同一服务器。

这些只是两个简单的建议,您可以混合使用两种方法或添加其他内容(例如内部通信区域服务器等),这将解决提到的问题,但会增加复杂性。

关于node.js - 根据条件将流量路由到多个 Node 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29811233/

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