从J2ME客户端轮询HTTP服务器
题
我的手机(客户端)上有一个J2ME应用程序,
我想与服务器打开HTTP连接,并继续进行轮询以获取服务器上的最新信息。
进行的每次民意调查都将消耗GPRS字节,从长远来看,这将是昂贵的,因为GPRS计费是基于发送和接收的数据包的。是否有使用HTTP协议进行轮询的字节有效方法?
我也听说过长期的民意调查,但我不确定它是如何工作的以及它的效率。
实际上,预先使用的方法是让服务器告诉手机应用程序,就可以使用新数据来进行调查,但是我不知道这些技术尤其是在J2ME中。
解决方案
如果您只想使用HTTP解决此问题, 长期投票 将是最好的方法。这很容易。首先,您需要在服务器端设置URL以进行通知(例如 http://example.com/notify
),并定义通知协议。该协议可以像某些文本行一样简单,每行都是事件。例如,
MSG user1
PHOTO user2 album1
EMAIL user1
HEARTBEAT 300
手机上的投票线程正常工作,
- 与通知URL建立HTTP连接。在J2ME中,您可以使用GCF HTTPConnection。
- 如果没有事件要推,服务器将阻止。
- 如果服务器做出响应,请获取每行并产生一个新线程,以将应用程序通知应用程序,并将环回到#1。
- 如果连接出于任何原因关闭,请睡一会儿,然后返回步骤1。
您必须注意以下实施细节,
- 调整客户端和服务器上的HTTP超时。超时时间越长,效率就越大。定时连接将导致重新连接。
- 在手机和服务器上启用HTTP KeepAlive。 TCP的三路握手在GPRS期限很昂贵,因此请尝试避免使用它。
- 检测过时的连接。在移动环境中,很容易获得陈旧的HTTP连接(连接已经消失了,但是投票线程仍在等待)。您可以使用心跳来恢复。说心跳率为5分钟。服务器应在每5分钟内发送通知。如果没有数据可以推动,只需发送心跳即可。在电话上,如果没有收到5分钟的未收到的情况,则投票线程应试图关闭并重新打开投票连接。
- 仔细处理连接错误。当存在连通性问题时,长期的民意调查不能很好地工作。如果无法正确处理,那可能是破坏交易的人。例如,如果睡眠不够长,您可以在步骤4上浪费大量数据包。如果可能的话,请在手机上检查GPRS的可用性,并在无法节省电池时搁置投票线程。
- 如果无法正确实施,服务器成本可能很高。例如,如果您使用Java Servlet,则每个运行的应用程序将至少具有一个相应的轮询连接及其线程。根据用户的数量,这可能会迅速杀死tomcat :)您需要使用诸如Apache Mina之类的资源高效技术。
有人告诉我还有其他更有效的方法可以将通知通知手机,例如使用SMS和一些IP级技巧。但是,您要么必须进行一些低水平的不可便捷的编程,要么遇到违反专利的风险。长时间的民意调查可能是只有HTTP解决方案可以得到的最好的。
其他提示
这 主HTTP请求 是HTTP提供的方法,如果您想检查页面是否已更改,则浏览器和代理服务器使用该方法,以检查是否已更新页面而不消耗太多带宽。
用http术语,头部请求与没有身体的情况相同,我认为这最多只有几百个字节,如果您的民意调查不是很频繁,则看起来可以接受。
最好的方法是使用套接字连接。像Gmail这样的许多应用程序都使用它们。
不隶属于 StackOverflow