开发一个通用多人API

我的任务是在JavaScript中开发一个通用多人API,并带有一个Node.js后端。 API的目标是为JavaScript手机游戏开发者提供服务,以便他们可以使用简单易用的API和现有的后端开发多人游戏。

该项目还包括开发实现,Node.js服务器和testing游戏,否则我无法testing它的课程。 所以把它称为整个图书馆的发展是更准确的。

我遇到的问题是试图找出如何提供一个很好的游戏同步机制。 图书馆可以提供房间和连接管理,朋友列表,注册和soforth,因为这些东西在每个游戏中都使用相同的机制。 然而,游戏同步逻辑可以是非常特定于游戏的,并且在通用库和服务器中是绝对不允许的。

我正在使用以下库/框架进行开发:

  • Node.js作为游戏服务器。
  • 客户端和服务器端的Socket.io用于websocket通信。
  • Require.js客户端启用模块化开发。
  • Redis作为持久存储的数据库。

为了澄清图书馆的目标:

  • 支持各种各样的游戏,从基于回合的100个可同步对象的策略游戏到多人自上而下的射击游戏,延迟是最重要的。
  • 没有客户必须扮演某种“服务器”的角色。
  • 最小化手动设置客户端。
  • 精确同步,无需同步整个游戏状态。
  • 服务器 – 客户端体系结构没有包含游戏特定代码的服务器。
  • 不应该对开发者构成限制,也不应该要求某些编码实践。
  • 提供一个易于使用的抽象来使用通用同步机制。
  • 整个游戏范围必须由相同的通用服务器逻辑来支持。
  • 在API或服务器上滞后补偿必须是自动的,但不是游戏特定的。

所以对于主要问题:这是可能的还是应该提供一种方法来轻松地投射,多播和广播消息,并将实际的同步机制留给开发人员? 你将如何去呢?

尝试提供除了实时多人游戏的通用消息的投射,多播和广播之外的任何事情都很困难(也可能是矫枉过正)。

你甚至可以通过在websocket服务后面创建简单的键值(string-JSON)空间存储来实现更通用的操作,例如:

  • 设置(键,值)
  • 得到(钥匙)
  • 观察(钥匙)
  • 也许像setReadOnly(键,布尔)
  • 或更复杂的权限API
  • 可能是用于数组操作的API

通过观察每个客户机中的相同密钥(“/ msg / broadcast”),将其用作广播将是容易的。 有了这样的API,你甚至可以有多个广播频道(如“/事件/广播”和“/聊天/广播”)。 它也可以用于直接通信和存储游戏状态信息(可用于在比赛期间join房间的玩家)。

顺便说一句:你可以看看Google Play游戏服务 。 他们(其中包括)基于回合的比赛的REST API。