带有 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

带有 WCF 客户端的 Java JAX-WS 服务

使用 Openfire 服务器和 XMPP(SMACK)客户端的 Android 聊天应用程序 [关闭]

在 Java (Android) 中连接到 IOCP 服务器

WCF聊天/游戏服务器 - 客户端关机

C#服务端,Android客户端 开发IM,服务端怎么弄,有没有开源的框架