我有兴趣为Android和可能的iPhone应用程序构建一个实时聊天应用程序。我对websockets做了一些背景研究,它们似乎是一个合理的选择。然而,注意到消息可以在任何时候发送给用户,这对于聊天应用程序来说是很常见的,客户机服务器连接的套接字将永远不被允许关闭,否则用户将无法获得任何信息流和新消息。
我很好奇,会有有害的后果,以这种方式构建我的应用程序使用永久开放连接的套接字?
客户端的主要缺点是无线电的电池消耗,因为这需要保持数据连接。请注意,这对于任何尝试进行推送的解决方案都是一样的,所以WebSockets和HTTP长轮询之间没有真正的区别。如果你想让消息立即到达,你需要一个连接。
在服务器上,主要的成本是RAM。与HTTP服务器不同,WebSocket服务器的设计使得每个连接不使用一个线程,因此扩展到大量并行连接本身是没有问题的。
我建议只在应用程序处于前台时使用套接字连接,一旦应用程序进入后台回退到GCM唤醒设备,然后再次建立套接字连接。这样,应用程序就不会占用太多电池。此外,我怀疑iOS是否会允许长时间的套接字连接。下面是一个示例代码,用于构建一个使用套接字连接和推送通知的聊天https://github.com/AppLozic/Applozic-Android-SDK