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