Java Android是否可以使用流式HTTP连接?

Java Android是否可以使用流式HTTP连接?,java,android,http,comet,Java,Android,Http,Comet,我正在使用HTTP rest API,我需要能够注册以接收异步事件通知 应用程序首先为事件建立一个事件通道 通过向API发送POST请求进行传递。事件通道被建立为流式HTTP连接。此持久连接是使用Comet语义创建的 是否可以使用Java/Android设置长时间运行的HTTP连接 我相信需要某种套接字,它也允许您发布数据 编辑 我正在创建的应用程序将位于始终具有以太网连接和主电源的设备上。因此,电源/连接问题并非真正的问题。是的,这是可能的,例如,您可以在中实现此类连接,即使您的应用程序未运行

我正在使用HTTP rest API,我需要能够注册以接收异步事件通知

应用程序首先为事件建立一个事件通道 通过向API发送POST请求进行传递。事件通道被建立为流式HTTP连接。此持久连接是使用Comet语义创建的

是否可以使用Java/Android设置长时间运行的HTTP连接

我相信需要某种套接字,它也允许您发布数据

编辑
我正在创建的应用程序将位于始终具有以太网连接和主电源的设备上。因此,电源/连接问题并非真正的问题。

是的,这是可能的,例如,您可以在中实现此类连接,即使您的应用程序未运行,该连接也会运行。如果需要,您还可以请求权限以防止设备/CPU睡眠(例如)

然后使用哪种连接(通过或Apache HttpClient、GET、POST等)取决于您和您的需要。但是,请特别注意文档中的警告:

注意:服务在其宿主进程的主线程中运行 服务不创建自己的线程,也不在单独的线程中运行 过程(除非您另有规定)。这意味着,如果 服务将执行任何CPU密集型工作或阻塞操作 (如MP3播放或网络),您应该创建一个新线程 在服务范围内完成该工作

如果超时是一个问题,您可能需要将这些设置为无限值,例如使用
setReadTimeout(0)
(,尽管默认情况下连接不应超时)或其他超时配置


还请记住,长时间运行(联网)操作会非常快地耗尽电池。

IMO-comet不适合4g上的低功耗设备使用

您正在使用的rest api在升级到内部代理/网关后才可用于移动,以便通过推送协议与IOS/Android客户端联系,后者更喜欢通过另一种比Comet更合适的api/协议发送事件通知

如果你必须同时使用API并达到Android,那么考虑为你的Android用户构建一个代理,它将把彗星调用转换成Android推送消息。p> 你可能会看到Parse.com这样的东西,因为它们有很好的本地REST和android端。ie在Heroko/AWS节点上进行代理,然后向您的客户发送本机android推送,这并不是什么大不了的事


--编辑

我知道某项服务正在长时间运行,问题是该连接未保持活动状态。。例如,HttpUrlConnection的活动时间不够长,无法充当传入响应的侦听器。幸运的是,电池耗电不是问题:)那只是时间问题?查看编辑。请查看我的编辑。。。不幸的是,我无法更改API,而不必修改响应,然后将其传递到设备。我猜您使用HttpUrlConn比使用apache http客户端更幸运。您可能需要花一点时间阅读android源AOSP,以便实际了解它对header=“Transfer Encoding:chunked”的作用。请参阅我对android代码的编辑,以便使用“分块”从谷歌进行流式传输