我想建立一个2人回合制游戏与权威服务器来管理游戏状态/逻辑。我心目中的流程是这样的:
- 玩家被订阅到一个独特的游戏频道(通过pubnub/pusher/类似的东西)
- 玩家通过HTTP直接向游戏服务器提交回合数
- 服务器运行游戏逻辑并将结果发布到游戏通道(两个玩家都订阅)
- 客户端处理响应并呈现结果 不过《li》的配对让我有点困惑。有什么建议吗?
这是在这种情况下使用pub/sub服务的"正确"方式吗?有没有更好的方法(除了不断轮询服务器之外)?
这是我们办公室的一个热门话题!我一直使用PubNub作为权威的游戏服务器,使用创造性的通道名称选择。它是这样工作的:
- 运行node.js服务器(不必是node;可以是任何东西)为您的内容提供服务,也可以作为权威实体。
- 当客户端连接时,生成一个UUID(可以在服务器端或客户端完成),并让客户端和服务器都监听该通道(类似于"my_game_[UUID]")。
- 由于没有其他客户端知道此通道名称,因此客户端和服务器可以在此通道上自由通信。
- 服务器可以与所有人通信,客户端可以通过服务器执行安全操作,并使用"不安全"的vanilla pubnub通道相互通信。
你的建议听起来很棒,而且是"正确"的方法。您所面临的挑战从计算机时代开始就存在,在计算机时代,需要在多个设备(如移动智能手机)之间同步数据。轮询是缓慢且昂贵的(并且对大量玩家来说没有意义)。多人游戏就是一个很好的例子,需要配对玩家并提供游戏室。你的解决方案是:
- 创建游戏大厅,玩家可以创建游戏房间并加入游戏房间。
- 创建一个自动配对的玩家(快速加入)[推荐]
您可以使用诸如Socket之类的产品来解决此技术挑战。IO和其他一些开源选项。然而,你只想构建自己的游戏,而不是专注于部署Node.JS服务器并将其连接到Express。
使用云服务,如PubNub, PusherApp或Beacon Push。利用Pub/Sub API在多人游戏环境中轻松同步用户