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