0

我正在使用Kryonet(Java TCP/UDP网络库)在线实时多人在线游戏创建,我打算在AWS上托管。如何在AWS上扩展专用的EC2实例?

该架构如下:客户端连接到一个中央登录/帐户服务器,允许他们登录和查看他们的统计等。这一点很容易,因为它基本上只是一个REST API,可以缩放以一种非常标准的方式(就像任何Web应用程序一样)。

然而,更有趣的一点是,当玩家实际上打比赛时。为此,我打算有一个单独的“匹配”服务器(EC2)池。登录/帐户服务器将配对两个玩家,然后向客户端发送特定匹配服务器的地址。然后球员将加入那场比赛服务器,这将服务于他们的比赛(可能持续5-10分钟)。匹配服务器需要粘性,因为它将运行实时游戏实例,并且将实时发送/接收UDP数据包。每个匹配服务器可能能够举办几百场比赛。

我的问题是关于如何去扩展这些匹配服务器。我想我会让他们在启动时自动注册中央服务器,并发送一些类型的活着。我可以自己建立这一切;不过,我想知道AWS是否有能够为我完成这些工作的工具/服务。

+0

你可能想看看[Amazon GameLift](https://aws.amazon.com/gamelift/)。 –

+0

不幸的是,GameLift似乎不支持基于Java的服务器。 我不打算使用Unity或Unreal,而是使用Libgdx和Kryo​​net的组合。 – Jambo

回答

0

好的,我已经做了更多的AWS文档阅读。看起来我可能达到这个如下:

每次两名球员配对,他们被添加到一个队列。当其中一个匹配播放服务器上的某个位置空闲时,它们将从队列中排除。当此队列的大小超过某个阈值时,将缩放EC2的数量。这可以通过基本上所有的AWS配置完成:http://docs.aws.amazon.com/autoscaling/latest/userguide/as-using-sqs-queue.html

棘手的一点是缩小实例。与普通的REST API不同,您不能关闭服务器。服务器需要完成当前的所有游戏。看起来AWS也有覆盖生命周期的钩子。