轮询从J2ME客户机一个HTTP服务器(polling a HTTP server from J2M

2019-07-31 17:03发布

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

我想开与服务器的HTTP连接,并保持轮询服务器上的最新信息。

每个投票进行将使用了GPRS字节,会变成昂贵的,从长远来看,随着GPRS计费是根据发送的数据包和接收。 有没有使用HTTP协议轮询的字节有效的方式?

我还听说长轮询的,但我不知道它是如何工作以及如何高效定。

其实参访的方式将是服务器告诉电话应用程序,新的数据就可以使用这种方式投票将不再需要做的,但我不知道这些技术特别是在J2ME。

Answer 1:

如果你想只使用HTTP解决这个问题, 长轮询将是最好的方式。 这是相当容易的。 首先,你需要安装在服务器端的通知(例如URL http://example.com/notify ),并定义通知协议。 所述协议可以是简单,如一些文本行和每行是一个事件。 例如,

  MSG user1
  PHOTO user2 album1
  EMAIL user1
  HEARTBEAT 300

关于手机的工作原理是这样的轮询线程,

  1. 做一个HTTP连接到通知的URL。 在J2ME中,你可以使用GCF的HttpConnection。
  2. 该服务器将阻止如果没有事件推。
  3. 如果服务器响应,得到每一行,并生成一个新的线程来应用和回送通知#1。
  4. 如果连接任何原因关闭,睡了一会儿,回到步骤1。

你必须注意以下实现细节,

  1. 调超时HTTP客户端和服务器上。 时间越长,超时,更有效率。 超时连接会导致重新连接。
  2. 启用手机和服务器上的HTTP保持活动。 TCP的三次握手是在GPRS长期昂贵,因此尽量避免它。
  3. 检测失效连接。 在移动环境中,这是很容易得到陈旧HTTP连接(连接是走了,但轮询线程仍在等待)。 您可以使用心跳恢复。 说的心跳率是5分钟。 服务器应该在每5分钟发送通知。 如果没有数据来推,只是发送心跳。 在电话中,轮询线程应尽量关闭,如果5分钟没有收到任何重新打开轮询连接。
  4. 仔细处理连接错误。 当有连接问题,长轮询不能很好地工作。 如果处理不当,它可以是致命弱点。 例如,你可以,如果睡眠不够长浪费很多的步骤4包。 如果可能的话,检查手机上GPRS的可用性,并把轮询线程暂停时,GPRS无法使用,以节省电池。
  5. 如果不能正确执行服务器的成本可能非常高。 例如,如果你使用的Java servlet,每个正在运行的应用程序将有相应的轮询连接,它的线程的至少一个。 根据用户的数量,这样可以快速杀灭Tomcat的:)你需要使用资源节约技术,如Apache米娜。

有人告诉我,还有其他更有效的方式来推送通知到手机,喜欢用短信和一些IP级别的技巧。 但是,你要么必须做一些低层次的非便携式编程或遇到专利侵权的风险。 长轮询可能是你可以用一个HTTP唯一的解决办法得到最好的。



Answer 2:

我完全不知道你所说的“投票”的意思,你的意思是这样IMAP IDLE ? 的连接保持打开状态,并没有开销连连建立连接本身。 如上所述,另一个可能的解决方案是一个HTTP请求的报头HEAD(忘了它,谢谢!)。

看看这个教程对J2ME HTTP连接的基础。

将数据推送到一个应用程序/装置而不推支持(如黑莓)是不可能的。



Answer 3:

该HEAD HTTP请求是,如果你想检查网页已更改,或者不是HTTP提供的方法,它由浏览器和代理服务器检查网页是否已更新或不不消耗多少带宽。

在HTTP方面,HEAD请求是一样的GET没有身体,我想这会是一对夫妇只几百字节最多,如果你的调查是不是很频繁,看起来可以接受的。



Answer 4:

要做到这一点,最好的办法是使用套接字连接。 例如Gmail应用的许多使用它们。



文章来源: polling a HTTP server from J2ME client