我正在使用HTTP rest API,我需要能够注册以接收异步事件通知。
应用程序首先为事件建立事件通道 通过向API发送POST请求来进行传递。事件通道建立为流式HTTP连接。这个持久连接是使用Comet语义创建的。
是否可以与Java / Android建立长时间运行的HTTP连接?
我认为需要某种Socket才能发布数据。
修改 我正在创建的应用程序将位于始终具有以太网连接和主电源的设备上。因此,电源/连接问题并不是真正的问题。
答案 0 :(得分:0)
是的,有可能,你可以,例如在Service中实现此类连接,即使您的应用程序未运行,它也会运行。如果需要,您还可以请求权限以防止设备/ CPU休眠(例如WAKE_LOCk)。
您使用什么样的连接(通过HttpUrlConnection或Apache HttpClient,GET,POST等)取决于您和您的需求。但是,请在文档中特别注意此警告:
警告:服务在其托管进程的主线程中运行 - service不会创建自己的线程,也不会单独运行 过程(除非您另行指定)。这意味着,如果你的 服务将进行任何CPU密集型工作或阻塞操作 (如MP3播放或网络),你应该创建一个新的线程 在服务中做这项工作。
如果超时是个问题,您可能需要将其设置为无限值,例如使用setReadTimeout(0)
(docs,尽管默认情况下连接不应超时)或其他超时配置。
另请注意,长时间运行(联网)操作可以非常快速地<强力耗尽电池。
答案 1 :(得分:0)
IMO - 彗星不适合4g的低功率设备消耗......
你正在消费的这个休息api尚未准备好移动,直到它使用内部代理/网关进行升级,以便通过PUSH协议与IOS / Android客户端联系,而IOS / Android客户端更喜欢通过比Comet更合适的其他API /协议进行事件通知。
如果你必须消费api并同时到达android,那么考虑为你的Android用户构建一个代理,将Comet调用转换为android推送消息。
你可能会看到像Parse.com这样的东西,因为他们有很棒的Native REST和Push for android方面。即,在Heroko / AWS节点上代理然后向您的客户发送本机android推送并不是什么大事。
- 编辑android code