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



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

我的问题是;我应该如何构建我的套接字?为所有玩家提供一个插座似乎不太合适。我可以将世界分割成块,但我不知道如何管理块边界。由于大多数玩家在大多数时间都无法见面,我更希望每个玩家的套接字只获得与他们相关的更新。

我读到Socket.io有一个"房间"的概念,它只是接收相同消息的套接字。为每个连接的玩家提供一个单独的房间,我会在其中添加附近移动的任何其他玩家的插座,这可行吗?然后,每当玩家移动时,我都可以向那个房间发送消息。那么,当观众离开或加入房间时,我该如何处理呢?

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

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

区域是设置"通道"以控制数据订阅的好方法。您可以为每个区域指定离散的名称,并使用Socket.io房间为玩家订阅一个区域。

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

相关内容

  • 没有找到相关文章

最新更新