REST api 旁边的实时多人游戏
Posted
技术标签:
【中文标题】REST api 旁边的实时多人游戏【英文标题】:Realtime multiplayer game along side REST api 【发布时间】:2014-08-22 07:28:00 【问题描述】:我是一名刚刚迁移到 Node 的 Rails 开发人员,我决定编写一个由 postgres/express.js REST api 支持的 Angular 应用程序。到目前为止,我主要将 api 用于 CRUD 操作,但我想在两个玩家访问某个页面(互相挑战)时启动一个实时游戏实例。我正在考虑使用 socket.io 来完成实时功能。
该游戏类似于 gameboy 中的口袋妖怪,玩家轮流执行某些动作,直到其中一个获胜。
我有以下问题:
我应该有一个单独的服务器来使用 socket.io 处理游戏,还是可以使用与我的 API 运行的服务器相同的服务器?
我应该使用像 Pusher 这样的服务还是我可以自己创建架构?
如果玩家在游戏期间断开连接,我将如何确保没有数据丢失?
在什么时候(并发连接数/每秒请求数)我会遇到性能问题? 100、1000、10000?
谢谢
【问题讨论】:
【参考方案1】:如果实时逻辑与 CRUD 密切相关(即实时事件是写入 API 的直接结果),并且您期望系统的两个方面的使用情况大致相同,那么我会都在同一台服务器上。
如果可能,我强烈建议使用实时推送服务(免责声明:我为 Fanout.io 工作)。它会更简单,也可能更便宜。
确保数据不丢失的关键是在发送前将其保存在服务器上。不要依赖实时层来实现持久性(您可能犯的最大错误)。当客户端重新连接时,它可以通过普通 API 请求可能丢失的数据。因此,只需让您的 CRUD 内容正确,然后将实时事件分层放在上面。您可以通过这种方式创建一个非常具有网络弹性的服务。
您应该能够不假思索地获得数百个并发连接。超越将需要架构规划。当然,如果您委托给推送服务,那么您不必担心这一点,至少对于实时部分而言。
【讨论】:
感谢回复,架构规划具体包括哪些内容? 我的意思是您可能需要购买更大的服务器,利用每台服务器的多个内核(运行多个节点实例?),在许多服务器之间进行负载平衡,优化您的网络交互以实现更高的吞吐量服务器等以上是关于REST api 旁边的实时多人游戏的主要内容,如果未能解决你的问题,请参考以下文章