我正在制作多人游戏。现在我试图选择将Android设备连接到服务器的技术。客户端运行在Android上,游戏是MMORPG。我想用java编写服务器。 现在我只有3个想法:高负载Java服务器
1)使用普通的java和套接字创建多线程环境。通过这种方式,在游戏客户端和服务器之间执行全双工连接将变得更加容易。但我有以下担忧:
1.1)游戏是MMORPG与大量的对象,我不知道如果有这样的解决方案是如何缩放比如有5000人同时玩。我能在java机器上运行多少个线程?我如何近似计算?在情况1线程正在读取每个套接字和1个线程正在写入套接字(所以2个线程为1个球员)。
1.2)当玩家人数增加时,我将如何扩展自我写入的jar-archive以分布在多个服务器上?也许有一些特殊的技巧可以做到这一点?
1.3)很多编程开销 - 套接字API是相当低的水平。
2)为服务HTTP请求创建一个Servlet接口。
2.1)只要每个玩家都有他/她自己的会话,便于控制会话(和授权)。
2.2)可以连接到Java EE EJB或其他任何东西 - 系统级编程带来的很多复杂问题都会被带走。所以我可以专注于编写业务逻辑。 2.3)可以使用HTTP - 移动设备+浏览器为所有类型的客户端提供服务。 2.4.2)高速 - 甚至1个servlet容器每秒可以处理几千个请求,因此速度非常快。
2.4),但这种方法不能提供全双工通信。我将不得不每隔1秒发送一次请求以检查更新。 1秒延迟对游戏没有太大的影响,因为它是基于回合的,但它仍然会产生很多流量。有很多玩家玩的时候可行吗?我听说过一些COMET技术,但似乎如果服务器必须在行中推送很多消息,我仍然必须每次都发送请求+这种技术尚未建立。
3)创建套接字并通过JMS将它们连接到Java EE服务器。
3.1)酷,因为允许客户端和服务器之间的全双工通信+提供java EE的所有酷功能。以后可以通过servlet接口扩展到浏览器。
3.2)这似乎是某种过度设计的。人们真的会这么做吗?我的意思是它甚至是正确的方式?任何一个健全的开发者会这样做吗?
我想请你帮助我的选择吧。我没有太多经验来做这样的工作。并希望坚持最佳做法。
你应该读作[本文约C10K问题(http://www.kegel.com/c10k。 HTML)。建立可扩展的网络应用程序有很多建议和好的做法。 – nouney
2.4:您应该看看彗星框架,它允许使用全双工servlet ...这是一篇关于IBM的好文章http://www.ibm.com/developerworks/web/library/wa-cometjava/ – David