[英]Streaming HTTP connection possible with Android?
我正在使用HTTP Rest API,并且需要能够注册以接收异步事件通知。
该应用程序首先通过向API发送POST请求来建立事件传递事件通道。 事件通道被建立为流HTTP连接。 此持久连接是使用Comet语义创建的。
是否可以使用Java / Android建立长期运行的HTTP连接?
我相信需要某种Socket,它也允许您发布数据。
编辑我要创建的应用程序将位于始终具有以太网连接并且还具有电源的设备上。 因此,电源/连接性问题并不是真正的问题。
是的,有可能,例如,您可以在Service中实现此类连接,即使您的应用程序未运行,该服务也会运行。 如果需要,您还可以请求权限以防止设备/ CPU休眠(例如WAKE_LOCk )。
然后使用哪种连接(通过HttpUrlConnection或Apache HttpClient,GET,POST等)取决于您和您的需求。 但是,请在文档中特别注意此警告:
警告 :服务在其宿主进程的主线程中运行-该服务不会创建自己的线程,也不会在单独的进程中运行(除非您另行指定)。 这意味着,如果您的服务要执行任何CPU密集型工作或阻止操作(例如MP3播放或联网),则应在服务内创建一个新线程来执行该工作。
如果超时是一个问题,则可能需要将其设置为无限值,例如使用setReadTimeout(0)
( docs ,尽管默认情况下连接不应超时)或其他超时配置。
另外请记住,长时间运行(联网)会很快耗尽电池电量 。
IMO-彗星不适合4g上的低功率设备消耗...
您正在使用的此REST API尚未准备好用于移动设备,除非它通过内部代理/网关升级以将PUSH协议扩展到更喜欢通过另一个比Comet更合适的API /协议进行事件通知的IOS / Android客户端。
如果您必须同时使用api并到达android,请考虑为您的Android用户构建代理,以将Comet-calls转换为android push消息。
您可能会看到类似Parse.com的内容,因为它们在Android方面具有出色的本机REST和Push。 即,在Heroko / AWS节点上进行代理然后将本机android push发送到您的客户端上没什么大不了的。
-编辑android代码
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.