2011-09-05 126 views
3

我即将开始一个游戏项目。它将是一个带有Java服务器和Web和Android客户端的客户端 - 服务器体系结构的网络游戏。影响是低带宽(用于移动设备)和快速响应。客户端 - 服务器通信有哪些技术/库?我在网络应用程序(GWT/Vaadin和servlets)方面经验丰富,但不知道在实现游戏服务器时使用什么,主要是为了沟通。安卓客户端Java游戏服务器

我知道我可以使用Java套接字与对象序列化或可能JSON传递数据从客户端到服务器,但我不知道这些方法带宽方面是多么有效率?或者还有比这更适合的吗?只要把我指向正确的方向就足够了。

在此先感谢!

回答

1

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

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

这是一个体面的example如何使用Apache客户端库。我建议使用这些,因为java.net软件包确实只适用于最基本的GET请求。

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

+0

JSON的详细程度如何?我非常关心移动网络用户,并希望尽可能降低带宽。谢谢! – janhink

+0

这只是您需要在开发人员的易用性和灵活性(您)与网络上的数据大小之间进行权衡。你可以在一起使用一些随机格式来发送你的数据,这将占用很少的空间,但稍后很难改变。您还需要为每一边编写您自己的解析器/编码器。我不确定你的游戏的要求,但我不认为发送少量文本会打破任何人的银行。 – Nick

-1

这取决于您的项目的时间表。如果时间够了,请尝试掌握并比较与您的目标相关的技术。

+1

这就是要点。时间很短,所以我问这个问题来保存一些。 – janhink

1

主要的问题是,如果你使用WebTechnologies,比你无法实现,实现从服务器到客户端通信的有效途径...

客户端到服务器在HTTP GET工作得很好,但是你必须使用某种Comet来实现从服务器到客户端的通信。

这就是为什么普通旧式TCP连接套接字可能会更好地与客户端通信,特别是Android客户端。

但是用tcp套接字实现它可以很好地与android一起工作,但不能和浏览器一起工作。

我的解决方案:通过WebSocket实现通信。

WebSockets(HTML5的一部分)是一个HTTP扩展,用于启用客户端和服务器之间的全双工通信。

最重要的网页浏览器支持WebSocket的,如Firefox 4,Chrome浏览器9,歌剧10.7 但不是的Internet Explorer(支持IE 10的计划,与Windows 8正在添加)

而对于Android平台来说,也存在java库libaries来实现通信,我会认为,他们也适用于android。

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

对于服务器侧:Servlet API的3。0支持,就像Jetty 8

在我看来WebSocket会保存这个问题,所以你可以实现一个支持WebSocket的服务器,并通过WebSocket与Android客户端以及浏览器客户端(Internet Explorer除外)进行通信。