一个J2ME应用程序是否可以通过来自远程Web服务器的消息被触发?当运行在移动客户端手机上的J2ME应用程序接收到此消息时,我想执行一个任务。我已经了解了HTTP连接,但是我所理解的是它是一种基于客户端的协议,服务器仅会回复客户端请求。有没有任何协议可以让服务器向客户端发送命令而不需要客户端发起任何请求?那TCP或UDP接口如何呢?
一个J2ME应用程序是否可以通过来自远程Web服务器的消息被触发?当运行在移动客户端手机上的J2ME应用程序接收到此消息时,我想执行一个任务。我已经了解了HTTP连接,但是我所理解的是它是一种基于客户端的协议,服务器仅会回复客户端请求。有没有任何协议可以让服务器向客户端发送命令而不需要客户端发起任何请求?那TCP或UDP接口如何呢?
如果移动设备不允许您建立TCP连接,并且只能使用HTTP请求,则需要实现“长轮询”。
发送一个POST HTTP请求,Web服务器将尽可能长时间地等待(在超时之前),以便回答。如果连接处于空闲状态时有数据到达,则可以直接接收它。如果在长轮询请求之间到达一些数据,则会将其排队,直到请求进来。
如果您可以建立TCP连接,那么只需建立连接并让其保持空闲状态即可。我有icq和irc应用程序,基本上只是坐在那里等待服务器发送一些数据。
您可以打开套接字连接并在应用程序中实现“隐藏”(或“最小化”)功能。调用此函数以隐藏:
Display.getDisplay(MyMIDlet.instance).setCurrent(null);
循环监听服务器,如果收到消息,则通过从画布调用此函数弹出应用程序:
Display.getDisplay(MyMIDlet.instance).setCurrent(this);
但它并不适用于所有设备。
J2ME支持Socket推送。 但是,只有在您的服务器能够将数据传递到您的手机时,它才能正常工作。很可能运营商网关不允许这样做。 如果您的手机具有静态外部IP地址,则可能是可能的 - 一些运营商可以提供此服务以获得一定费用。