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

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

我的问题是 我应该如何去构build我的套接字? 对于所有玩家来说,只有一个sockets看起来不像是可以缩放的。 我可以把世界分成块,但我不知道如何pipe理块的边界。 由于大多数玩家大多数时间都无法看到彼此,所以我更希望每个玩家的套接字只能得到与他们相关的更新。

我读过,Socket.io有一个“房间”的概念,它只是sockets,得到相同的消息。 为每个连接的玩家设置一个单独的房间是否可行? 然后,每次玩家移动,我都可以发送消息给那个房间。 当观众离开或join房间时,我怎么能pipe理呢?

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

这是deviseMMO服务器的基本问题之一。 一般而言,您希望每个客户端都有一个套接字,并且实现了将客户端订阅到特定区域的逻辑。

地区是build立“渠道”来控制数据订阅的好方法。 你可以为每个地区分配不同的名字,并使用Socket.io房间来将玩家订阅到一个地区。

毕竟,事情变得更加容易处理。 因此,如果玩家在特定区域内移动,则服务器所要做的就是将“玩家移动”事件发送给事件X米内所有地区的所有用户。