我想构建一个Android应用程序,将数据从无线传感器(约3 kb/s)流式传输到我的服务器。
为了唤醒手机,事实证明我无法轻松地使用服务器中的套接字,但需要GCM推送通知。但是,如果我实现所有 GCM 的东西只是为了开始流式传输,那么将 GCM 用于数据流也可能更容易,而不是我自己的 websocket 实现。
文档说一个数据包最大可以达到4 kb,如果设备可以每秒可靠地传输一次,这应该足够了。但是,由于 GCM 不是为如此快速的间隔和带宽而设计的,是否有人有经验,如果它是可行和可靠的,或者打开与我的服务器的直接连接会更好?
直接连接到您自己的服务器,主要是因为正如您所说,GCM 服务并不是真正为此而设计的,如果 Google 认为您使用了太多带宽,则有权限制连接并延迟 GCM 通知。在进行压力测试时,我自己也经历过这种情况 - 通知开始变慢,最终使用的设备被禁止的Gmail帐户。
GCM 的一般模式应类似于:
服务器上发生了设备需要了解的事情。
GCM 通知以较小的有效负载发送到设备,例如 CommandNumber = 1。
设备侦听通知,并且由于 CommandNumber == 1,它以某种方式响应,在这种情况下可能会打开服务器的套接字。