在多人 Socket.io 游戏中管理套接字

Jes*_*ugh 3 multiplayer websocket node.js socket.io

我正在使用 Node.js 和 Socket.io 构建一个大型多人游戏。所有玩家都将在同一张无限地图上移动(想想 Minecraft)。当玩家移动时,我加载他们可见的图块。当玩家移动时,他们的动作应该发送给所有可以看到他们的玩家。

我的问题是;我应该如何构建我的套接字?为所有玩家提供一个插槽似乎不会扩展。我可以将世界分成多个块,但我不确定如何管理块边界。由于大多数玩家大部分时间都无法看到对方,因此我希望每个玩家的套接字只能获得与他们相关的更新。

我读过 Socket.io 有一个“房间”的概念,它只是获得相同消息的套接字。为每个连接的玩家设置一个单独的房间是否可行,我可以将移动到附近的任何其他玩家的插槽添加到其中?然后每次玩家移动时,我都可以向那个房间发送消息。当观众离开或加入房间时,我该如何管理?

显然,这是一个模糊的问题,但我只是在寻找最佳实践建议。链接到有关该主题的文章将不胜感激。

Col*_*sey 5

这是设计 MMO 服务器的基本问题之一。通常,您希望每个客户端都有一个套接字,并实现将客户端订阅到特定区域的逻辑。

区域是设置“通道”来控制数据订阅的好方法。您可以为每个地区使用不同的名称,并使用 Socket.io 房间为玩家订阅一个地区。

在这一切都发生之后,事情变得更容易处理了。因此,如果玩家在特定区域移动,服务器所要做的就是将“玩家移动”事件发送给事件 X 米内所有区域的所有订阅者。