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

Node.js 在多人Socket.io游戏中管理套接字,node.js,websocket,socket.io,multiplayer,Node.js,Websocket,Socket.io,Multiplayer,我正在用Node.js和Socket.io构建一个大型多人游戏。所有玩家都会在同一张无限地图上移动(想想Minecraft)。当玩家移动时,我加载对他们可见的瓷砖。当玩家移动时,他们的移动应该发送给所有能看到他们的玩家 我的问题是,;我应该如何构建我的套接字?为所有玩家提供一个插座似乎无法扩展。我可以将世界分割成块,但我不确定如何管理块边界。由于大多数玩家在大多数时间都无法看到对方,我更希望每个玩家的套接字只获得与他们相关的更新 我已经读到Socket.io有一个“房间”的概念,它只是获取相同消

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

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

我已经读到Socket.io有一个“房间”的概念,它只是获取相同消息的套接字。是否可以为每个连接的玩家提供一个单独的房间,我可以为附近移动的其他玩家添加插座?然后每次玩家移动时,我都可以向那个房间发送消息。那么,当观众离开或进入房间时,我该如何应对呢


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

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

区域是设置“通道”以控制数据订阅的好方法。您可以为每个区域指定不同的名称,并使用Socket.io文件室向某个区域订阅播放器

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

您是否想过使用它来查找玩家位置?一个开始寻找如何实现这一点的好地方是。你所说的“每个客户端一个套接字”是什么意思?是每个客户端一个websocket服务器(因此每个客户端的ip或端口不同),还是同一服务器ip/端口内的每个客户端一个连接?我也有同样的问题,但与棘轮。