我即将开始一个游戏项目。它将是一个具有客户端 - 服务器架构的网络游戏,具有Java服务器以及Web和Android客户端。影响在于低带宽(用于移动设备)和快速响应。有哪些技术/库可用于客户端 - 服务器通信?我在网络应用程序(GWT / Vaadin和servlets)方面经验丰富,但不知道在实现游戏服务器时应该使用什么,主要用于通信。
我知道我可以使用带有对象序列化的Java套接字或JSON来将数据从客户端传递到服务器,但我不知道这些方法在带宽方面有多高效?还是比这些更适合?只要把我指向正确的方向就足够了。
提前致谢!
答案 0 :(得分:1)
就Android客户端库而言,有两个主要选项。第一个是java.net。*包,你将主要使用HttpUrlConnection。
更好的选择是使用Android SDK中标准的Apache HTTP package。它在处理网络连接时为您提供了更多的控制/灵活性/冗长性。
这是如何使用Apache客户端库的一个不错的example。我建议使用这些,因为java.net包实际上只适用于最基本的GET请求。
我建议使用JSON方法,因为那时你不必编写Java servlet后端来反序列化Java对象。然后,后端可以独立于客户端进行更改。
答案 1 :(得分:1)
主要问题是,如果您使用WebTechnologies,则无法实现从服务器到客户端实现通信的有效方式......
通过HTTP GET的客户端到服务器工作正常,但您必须使用某种Comet来实现从服务器到客户端的通信。
这就是为什么通过套接字进行普通的旧tcp连接可能会更好地与客户端通信,尤其是对于Android客户端。
但是使用tcp socket实现它可以很好地使用android,但不适用于浏览器。
我的解决方案:通过WebSocket实现通信。
WebSockets(HTML5的一部分)是一个HTTP扩展,用于启用客户端和服务器之间的全双工通信。
最主要的网络浏览器支持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除外)进行通信
答案 2 :(得分:-1)
这取决于项目的时间范围。如果时间充足 - 请亲自动手并比较与您的目的相关的技术。