我的手机(客户端)上有一个J2ME应用程序,

我想与服务器打开HTTP连接,并继续进行轮询以获取服务器上的最新信息。

进行的每次民意调查都将消耗GPRS字节,从长远来看,这将是昂贵的,因为GPRS计费是基于发送和接收的数据包的。是否有使用HTTP协议进行轮询的字节有效方法?

我也听说过长期的民意调查,但我不确定它是如何工作的以及它的效率。

实际上,预先使用的方法是让服务器告诉手机应用程序,就可以使用新数据来进行调查,但是我不知道这些技术尤其是在J2ME中。

有帮助吗?

解决方案

如果您只想使用HTTP解决此问题, 长期投票 将是最好的方法。这很容易。首先,您需要在服务器端设置URL以进行通知(例如 http://example.com/notify),并定义通知协议。该协议可以像某些文本行一样简单,每行都是事件。例如,

  MSG user1
  PHOTO user2 album1
  EMAIL user1
  HEARTBEAT 300

手机上的投票线程正常工作,

  1. 与通知URL建立HTTP连接。在J2ME中,您可以使用GCF HTTPConnection。
  2. 如果没有事件要推,服务器将阻止。
  3. 如果服务器做出响应,请获取每行并产生一个新线程,以将应用程序通知应用程序,并将环回到#1。
  4. 如果连接出于任何原因关闭,请睡一会儿,然后返回步骤1。

您必须注意以下实施细节,

  1. 调整客户端和服务器上的HTTP超时。超时时间越长,效率就越大。定时连接将导致重新连接。
  2. 在手机和服务器上启用HTTP KeepAlive。 TCP的三路握手在GPRS期限很昂贵,因此请尝试避免使用它。
  3. 检测过时的连接。在移动环境中,很容易获得陈旧的HTTP连接(连接已经消失了,但是投票线程仍在等待)。您可以使用心跳来恢复。说心跳率为5分钟。服务器应在每5分钟内发送通知。如果没有数据可以推动,只需发送心跳即可。在电话上,如果没有收到5分钟的未收到的情况,则投票线程应试图关闭并重新打开投票连接。
  4. 仔细处理连接错误。当存在连通性问题时,长期的民意调查不能很好地工作。如果无法正确处理,那可能是破坏交易的人。例如,如果睡眠不够长,您可以在步骤4上浪费大量数据包。如果可能的话,请在手机上检查GPRS的可用性,并在无法节省电池时搁置投票线程。
  5. 如果无法正确实施,服务器成本可能很高。例如,如果您使用Java Servlet,则每个运行的应用程序将至少具有一个相应的轮询连接及其线程。根据用户的数量,这可能会迅速杀死tomcat :)您需要使用诸如Apache Mina之类的资源高效技术。

有人告诉我还有其他更有效的方法可以将通知通知手机,例如使用SMS和一些IP级技巧。但是,您要么必须进行一些低水平的不可便捷的编程,要么遇到违反专利的风险。长时间的民意调查可能是只有HTTP解决方案可以得到的最好的。

其他提示

我不知道您所说的“投票”是什么意思,您的意思是像 IMAP空闲?连接保持开放,没有开销可以一次又一次地建立连接。如前所述,另一个可能的解决方案是HTTP请求的头标头(忘记了,谢谢!)。

看看这个 教程 对于J2ME中的HTTP连接的基本。

不可能将数据推向应用程序/设备,而无需推动支持(例如黑莓)。

主HTTP请求 是HTTP提供的方法,如果您想检查页面是否已更改,则浏览器和代理服务器使用该方法,以检查是否已更新页面而不消耗太多带宽。

用http术语,头部请求与没有身体的情况相同,我认为这最多只有几百个字节,如果您的民意调查不是很频繁,则看起来可以接受。

最好的方法是使用套接字连接。像Gmail这样的许多应用程序都使用它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top