在J2ME中发出http请求
-
06-09-2019 - |
题
我正在维护一个 J2ME 应用程序,我在其中发现了一个 http 请求 http://www.google.com 在应用程序初始化中。我问开发者为什么有要求google。他说,这样应用程序发出的其他请求将会更快。
我删除了对 google.com 的此请求,其他请求变得更慢。
谁能解释为什么会发生这种情况?如何在不发出先前请求的情况下使其他请求更快?
编辑:
在初始化时向 google 发出请求:
- 第一个请求(初始化后)= 20秒
- 重复第一个请求 = 5 秒
在初始化时不发出请求:
- 第一个请求 = 40 秒
- 重复第一个请求 = 5 秒
解决方案
在移动设备上,启动 Web 连接需要花费一些时间,并且 JVM 通常会在 MIDlet 运行期间保持连接处于打开状态(大多数现代连接按字节收费 - Edge、GPRS、WiFi)。因此,如果在 startApp 上建立连接,您可能会发现该连接将保持打开状态,并且所有进一步的通信都不需要打开连接,只需发送数据。如此快速且更加可靠!
这种行为是特定于平台的,MIDP2 并不规定这是真的(因此诺基亚可能与三星等不同)。
连接到 127.0.0.1 可能不会欺骗 JVM,它可能会决定不需要开放的 GPRS 连接。再次是平台特定的。
詹姆士
其他提示
...也许第一个请求初始化设备中的网络层(*),也可能初始化 jvm。
我确信它也适用于 www.microsoft.com :-)
*)我怀疑这取决于您运行的设备。我不知道发生了什么,但可能有什么。例如 :启动无线电设备、与网络运营商建立会话、在 jvm 中加载和启动类。
尝试连接到 127.0.0.1 而不是 google,看看这是否会使以后的尝试更快。
如果应用程序正在执行大量初始化,并且在第一次真正的连接尝试之前需要一段时间,那么您可以尽早启动一个新线程来执行连接尝试。也许这会减少总等待时间。