我试着在一个月内做一个正确的“推”而不使用外部图书馆或gcm。
首先我尝试使用asmack运行xmpp,然后使用paho或ibm mqtt客户端使用mosquitto,使用alarmtimer运行http。
最后我以deacon和meteord结束,但因为它不是很好(在服务器端 - 高CPU和内存负载)我试图做一个longpolling连接。
我知道它需要一个心跳,最后我在思考延迟(300秒心跳应该足够了吗?)和正确的方法。
从服务器到客户端发送Heartbeat(1字节或其他)(延迟例如300秒)并在客户端300设置套接字超时(或者更好)是否更好(电池使用等)要把它从客户端发送到服务器吗?
目前我正在使用一个服务,该服务在onCreate中注册一个观察者并在onDestroy中注销。
Observer正在观察一个在Thread中建立tcp套接字连接的对象,并在断开连接时重试它(套接字超时)。
如果网络连接发生变化,我还会检查广播密码,并在需要时重新连接。
设备进入待机状态会发生什么?我是否真的需要一个告警管理器或timertask来接收或发送数据包?
设备是否会丢弃它进入待机状态的连接?
目前我尝试从服务器发送到客户端,延迟时间为120秒,即使设备显示仍然可以发送心跳,也可以发送心跳。
但至少看起来电池耗尽并不“可接受”。
那么......最好的方法是什么?
到目前为止,谢谢你。
答案 0 :(得分:1)
执行此操作的最佳解决方案是使用REST和Comet Server或至少NGinx使用Push Stream Module和Long Polling。我还创建了一个返回sticky的服务,并在启动时创建一个线程。线程连接。它甚至可以在待机和/或深度睡眠中工作。
答案 1 :(得分:0)
看看socket.io有Android的实现。我不认为在屏幕关闭时保持连接活着是一个好主意。我无法解答您的所有问题,但我知道默认情况下,当设备在某些设备上处于待机状态时,Wi-Fi连接会被终止(也可能取决于用户配置的设置)。
答案 2 :(得分:0)
对于Java,有一个非常成熟的项目实现了websocket和长轮询后备:https://github.com/cometd/cometd。它还有相当宽松的许可条款(BSD / Apache风格)。