带有 Android 客户端的 Java 游戏服务器
Posted
技术标签:
【中文标题】带有 Android 客户端的 Java 游戏服务器【英文标题】:Java game server with Android client 【发布时间】:2011-09-05 19:34:16 【问题描述】:我即将开始一个游戏项目。它将是一款具有客户端-服务器架构的网络游戏,带有 Java 服务器以及 Web 和 android 客户端。影响在于低带宽(用于移动设备)和快速响应。有哪些用于客户端-服务器通信的技术/库?我在 Web 应用程序(GWT/Vaadin 和 servlet)方面经验丰富,但不知道在实现游戏服务器时使用什么,主要用于通信。
我知道我可以使用带有对象序列化或 JSON 的 Java 套接字将数据从客户端传递到服务器,但我不知道这些方法在带宽方面的效率如何?或者还有比这些更合适的吗?只要给我指出正确的方向就足够了。
提前致谢!
【问题讨论】:
【参考方案1】:就 Android 客户端库而言,有两个主要选项。第一个只是 java.net.* 包,您将主要在其中使用HttpUrlConnection。
更好的选择是使用 Android SDK 中的标准 Apache HTTP package。它在处理网络连接时为您提供了更多的控制/灵活性/冗长性。
这里有一个不错的example,介绍了如何使用 Apache 客户端库。我建议使用这些,因为 java.net 包真的只适合最基本的 GET 请求。
我建议使用 JSON 方法,因为这样您就不必编写 Java servlet 后端来反序列化 Java 对象。然后后端可以独立于客户端进行更改。
【讨论】:
JSON 的冗长程度如何?我真的很关心移动网络用户,希望带宽尽可能低。谢谢! 这只是您需要在开发人员(您)的易用性和灵活性以及网络上的数据大小之间进行权衡。你可以拼凑一些随机格式来发送你的数据,这样会占用很少的空间,但以后很难改变。您还需要为每一侧编写自己的解析器/编码器。我不确定您的游戏要求,但我认为发送少量文本不会让任何人破产。【参考方案2】:主要问题是,如果你使用WebTechnologies,那么你就无法实现一种有效的方式来实现从服务器到客户端的通信......
通过 HTTP GET 的客户端到服务器可以正常工作,但是您必须使用某种 Comet 来实现从服务器到客户端的通信。
这就是为什么通过套接字的普通旧 tcp 连接可能更好地与客户端通信,尤其是与 Android 客户端通信。
但是使用 tcp 套接字实现它在 android 上效果很好,但在浏览器上却不行。
我的解决方案:通过 WebSocket 实现通信。
WebSockets(html5 的一部分)是一种 HTTP 扩展,用于实现客户端和服务器之间的全双工通信。
最主流的网络浏览器支持WebSocket,如Firefox 4、Chrome 9、Opera 10.7 但不是 Internet Explorer(计划在 IE 10 中提供支持,与 Windows 8 一起推出)
对于 android,也存在 java 库来实现通信,我希望它们也可以与 android 一起使用。
示例: http://code.google.com/p/weberknecht/
对于服务器端:Servlet API 3.0 支持,如 Jetty 8
在我看来,WebSocket 可以解决这个问题,因此您可以实现一个支持 WebSocket 的服务器,并通过 WebSocket 与 Android 客户端以及浏览器客户端(Internet Explorer 除外)进行通信
【讨论】:
【参考方案3】:这取决于您的项目的时间范围。如果时间足够,请在您的手中尝试并比较与您的目的相关的技术。
【讨论】:
这就是重点。时间很短,所以我问这个问题是为了节省一些时间。以上是关于带有 Android 客户端的 Java 游戏服务器的主要内容,如果未能解决你的问题,请参考以下文章
带有 Node.js/Socket.IO 服务器和客户端的 Phonegap 应用程序中的 Android 的 WebSockets
使用 Openfire 服务器和 XMPP(SMACK)客户端的 Android 聊天应用程序 [关闭]