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

时间:2012-03-29 06:59:21

标签: node.js websocket socket.io multiplayer

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

区域是设置“渠道”以控制数据订阅的好方法。您可以为每个区域设置离散名称,并使用Socket.io会议室将玩家订阅到某个区域。

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