我可能会在这里问一点,但我对社区有信心,所以值得尝试。我正在制作游戏,我正在尝试选择用于在Java移动客户端和Java服务器后端之间进行通信的连接类型。
Java中的套接字编程很简单 - 主题上有lovely tutorial,双向通信很简单。
麻烦的是,在移动客户端(Android)上,无法保证蜂窝网络可以让您建立TCP连接。这让我觉得使用HTTP连接是可行的方法。
HTTP连接是基于请求的,但我需要一种方法将通知从服务器推送到客户端。似乎这个问题的解决方案是使用“长轮询”我已经阅读了一些关于它但尚未看到我想要实现的一个简单示例。
我可能会问很多,但这似乎是一个相当普遍的问题,是否有一个库或框架我可以导入/使用来包装Http连接并提供双向长连接(自动重新连接等)。我读了一些关于cometD的内容,但它似乎没有我可以选择的Java库。
我需要的沟通并不重,不是常数双向数据流,只是偶尔更新以保持游戏进行。
提前感谢您筛选我的无知,
加文
答案 0 :(得分:1)
在设备上进行长轮询在移动设备上有一些缺点。
如果您想尝试一个显示此问题的游戏,请尝试Parallel Kingdom Age of Emergence。
我会按照亚历克斯的提议来研究XMMP。如果您在Android上找不到XMMP库,请使用Smack。 或者看看这个question。
答案 1 :(得分:0)
正如吉姆刘易斯所提到的,TCP是完全可能的。无论你使用什么交通工具,你总是最终不得不处理移动办公 - 即失去服务,重新连接等。
以同样的方式查看前一个问题:
Best approach to send data from a server to an Android device
另外,您可以尝试查看爱立信的Android推送库,它可以封装您想要的一些重新连接的东西(不是我已经检查过):
https://labs.ericsson.com/apis/mobile-java-push/blog/first-version-push-android-available
答案 2 :(得分:0)
Comet模型尝试在使用HTTP时解决此问题。有一些Java示例here。
您会在客户端找到主要讨论ajax / XMLHttpRequest的示例/文章,但您真正需要做的就是确保您使用的是使用http / 1.1和http keepalive的客户端库,并“轮询”循环中的URL。
这个想法是服务器服务器阻止,并且在实际值得注意的事情之前不会向您发送响应,而http keepalive会在请求之间保持与服务器的连接,因此您不需要支付设置的费用。每个请求的新TCP连接 - 我假设android已经有一个标准的http库,应该为你处理所有这些,包括重新连接。
在服务器端,Tomcat支持上面developerWorks文章中提到的Comet处理 - 除非你想在servlet中“手动”执行它,这也是非常明星的,直到你需要真正扩展客户端的no .. s,还有gwt-comet
等框架