【问题标题】:Managing Sockets in a Multiplayer Socket.io Game在多人 Socket.io 游戏中管理套接字
【发布时间】:2012-04-12 19:30:14
【问题描述】:

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

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

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

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

【问题讨论】:

标签: node.js websocket socket.io multiplayer


【解决方案1】:

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

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

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

【讨论】:

  • “每个客户端一个套接字”是什么意思?是每个客户端一个 websocket 服务器(因此每个客户端有不同的 ip 或端口),还是在同一服务器 ip/port 内每个客户端一个连接?我也有同样的问题,不过 Ratchet。
猜你喜欢
  • 2012-05-03
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
相关资源
最近更新 更多