我正在制作多人游戏。现在我正在尝试选择将 android 设备连接到服务器的技术。客户端运行安卓,游戏为MMORPG。我想用java编写服务器。现在我只有3个想法:
1) 使用纯 java 和套接字创建多线程环境。这样在游戏客户端和服务器之间进行全双工连接会更容易。但我有以下担忧:
1.1)该游戏是具有大量对象的MMORPG,如果有例如5000人同时玩,我不确定这些解决方案如何缩放。我可以在 java Machine 上运行多少个线程?我该如何近似计算?如果每个套接字有 1 个线程正在读取,而 1 个线程正在写入套接字(因此 1 个玩家有 2 个线程)。
1.2) 当玩家数量增加时,我将如何扩展我自己编写的 jar-archive 以分布在多个服务器上?也许有一些特殊的技巧可以做到这一点?
1.3) 大量的编程开销 - 套接字 API 非常低级。
2) 创建一个用于服务 HTTP 请求的 Servlet 接口。
2.1) 只要每个玩家都有自己的会话,就易于控制会话(和授权)。
2.2) 可以连接到 java EE EJB 或其他 - 消除了系统级编程的许多复杂性。所以我可以专注于编写业务逻辑。
2.3) 可以使用HTTP服务所有类型的客户端——移动设备+浏览器。
2.4) 高速——即使是 1 个 servlet 容器每秒也可以处理几千个请求,所以速度非常快。
2.4)但是这种方法不能提供全双工通信。我将不得不每 1 秒发送一次请求以检查更新。1 秒的延迟对游戏来说并没有太大的区别,因为它是回合制的,但它仍然会产生大量的流量。有很多玩家玩的时候可行吗?我听说过一些COMET技术,但是如果服务器必须连续推送许多消息,我仍然必须每次发送请求+该技术尚未成熟。
3) 创建套接字并通过 JMS 将它们连接到 java EE 服务器。
3.1)很酷,因为允许客户端和服务器之间的全双工通信+提供Java EE的所有很酷的功能。以后可以通过servlet接口扩展到浏览器。
3.2)这似乎是某种过度工程。人们真的会这样做吗?我的意思是它甚至是正确的方法吗?任何理智的开发人员会这样做吗?
我希望你帮我做出选择。我没有太多做这样的工作的经验。并希望坚持最佳做法。