Java游戏服务器与Android客户端

3
我即将开始一个游戏项目。它将是一个网络游戏,采用客户端-服务器架构,Java服务器和Web和Android客户端。重点在于低带宽(适用于移动设备)和快速响应。有哪些技术/库可用于客户端-服务器通信?我对Web应用程序(GWT/Vaadin和Servlets)有一定的经验,但在实现游戏服务器时不知道该使用什么,主要是为了通信。
我知道我可以使用Java套接字与对象序列化或JSON传递数据从客户端到服务器,但我不知道这些方法在带宽方面的效率如何?还有没有更适合的方法?只需指出正确的方向即可。
提前致谢!
3个回答

1

就 Android 客户端库而言,有两个主要选项。第一个是 java.net.* 包,其中你将主要使用 HttpUrlConnection

更好的选择是使用 Apache HTTP package,它也是 Android SDK 中的标准选项。它在处理网络连接时提供了更多的控制/灵活性/冗长性。

这里有一个不错的 示例,展示如何使用 Apache 客户端库。我建议使用这些,因为 java.net 包只适用于最基本的 GET 请求。

我建议使用 JSON 方法,因为这样你就不必编写 Java servlet 后端来反序列化 Java 对象。后端可以独立于客户端进行更改。


JSON 的冗长程度怎么样?我非常关心移动网络用户,希望带宽尽可能低。谢谢! - janhink
这只是一个你需要在开发者(即你)的易用性和灵活性以及网络数据大小之间做出的权衡。你可以随意拼凑一些格式来发送你的数据,这样会占用很少的空间,但以后修改会很困难。你还需要为每个方面编写自己的解析器/编码器。我不确定你的游戏要求如何,但我认为发送少量文本不会对任何人造成太大负担。 - Nick

1
主要问题是,如果您使用Web技术,则无法实现有效的服务器到客户端通信方式。
客户端到服务器的HTTP GET方式可以正常工作,但必须使用某种Comet方式来实现服务器到客户端的通信。
这就是为什么使用套接字上的纯老式tcp连接可能是与客户端通信的更好选择,特别是对于Android客户端。
但是,使用tcp套接字实现它在Android上运行良好,但不适用于浏览器。
我的解决方案:通过WebSocket实现通信。
WebSocket(HTML5的一部分)是HTTP扩展,可启用全双工通信客户端和服务器之间的通信。
大多数主要的Web浏览器都支持WebSocket,如Firefox 4,Chrome 9,Opera 10.7。但是不支持Internet Explorer(IE 10中支持,随Windows 8一起推出)。
对于Android,还存在Java库来实现通信,而且我希望它们也能在Android上良好运行。

Expample: http://code.google.com/p/weberknecht/

对于服务器端:支持 Servlet API 3.0,就像 Jetty 8 一样。
在我看来,WebSocket 可以解决这个问题,因此您可以实现一个支持 WebSocket 的单个服务器,并通过 WebSocket 与 Android 客户端以及浏览器客户端(除了 Internet Explorer)进行通信。

-1

这取决于您项目的时间框架。如果时间充足-尝试亲自动手并比较与您目的相关的技术。


1
这就是关键。时间相当紧迫,所以我提出问题是为了节省一些时间。 - janhink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接