我希望能够在我的应用和服务器之间交换数据,其中每一方都必须能够发起数据发送。我希望它能够快速发生,并且在我的情况下,从客户端轮询新邮件的速度还不够快。推送技术如何运作?
我正在考虑保持从设备到服务器的打开套接字连接,并以某种自定义格式发送接收原始字节。 这是一个好方法,我可能会遇到什么问题?你会建议什么作为替代方案?
答案 0 :(得分:1)
Push技术被称为Comet。基本逻辑是打开与服务器的持久HTTP连接(通常称为HTTP Streaming)。由于此连接不会永远持续(由于默认情况下服务器的限制),您应该能够重新打开连接。我不确定如何在Android中专门做到这一点,但这应该是可能的。
这背后的基本概念在blogpost
中有所解释由于这是一个概念,它可以在您选择的任何服务器端编程语言中实现。这个tutorial给出了关于如何在php中实现COMET的公平介绍。 socket.io是另一个这样的库,如果你对javascript感到满意的话。此SOF thread提供了一些有用的链接。
有利有弊,
答案 1 :(得分:1)
当涉及到消息传递时,初始化服务器和客户端之间的新连接所需的时间通常会超过发送数据本身所需的时间 - 至少对于类似状态的简单消息而言。这大大增加了通信延迟,这似乎是您主要关注的问题。
有两种主要方法可以解决这个问题:
始终保持两端之间的连接打开:这是处理此问题的标准方法 - 它具有编程简单的优点但您可能需要定期使用保持活动的数据包以保持连接打开。这可能会缩短移动设备的电池寿命并略微增加网络成本。它还可能与移动设备的电源管理功能不利地互动。
此外,无论你做什么,你都不能完全消除在不方便的时候需要建立新连接的可能性 - 大多数闲置的连接在今天都不是很好网络基础设施,我恐怕......
使用无连接协议,例如UDP:此解决方案有可能最大限度地降低通信和电源成本,但它需要您的服务器和客户端旨在处理此类协议固有的不可靠性。
尽管如此,我不认为数据的实际格式是一个主要问题,直到一些分析表明自定义格式确实会带来显着的节省。我认为在开发阶段使用现成的网络监控和分析软件的能力更为重要......