使用Android的HTTP或Socket



我必须从Android手机发送数据到服务器非常频繁地说每100毫秒。(电池不是问题)。我一直在争论是使用标准的Java URL连接来实现这个目的,还是使用SocketChannel创建我自己的定制套接字实现。我可以完全控制两个端点并自由选择任何我想要的东西。每种方法的优缺点是什么?还有其他方法吗?请注意,我已经尝试过Google XMPP。但我发现很多数据点都丢失了。没有收到Google的回复。

请注意,可靠性是首要考虑的问题。我必须实时获取每个样本,除非无线电链路本身出了问题。请提供一些建议。

Socket TCP连接:

  • (+) TCP报文重传的可靠传输。
  • (-)非标准端口/协议被许多移动互联网提供商阻止
  • (-)数据包重传可能导致延迟,因此不是实时的。

Socket UDP连接

  • (+)如果数据包通过,它将以这些方法中最低的延迟接收。
  • (-)非标准端口/协议被许多移动互联网提供商阻止
  • (-)传输不可靠,数据包可能被复制、截断或丢弃。

HttpUrlConnection:

  • (+)许多用户可以使用你的应用程序(许多移动互联网提供商阻止HTTP(80)和HTTPS(443)以外的端口,并使用深度数据包检测(HTTP)来确保协议被遵守)。
  • 最可靠的TCP重传和代理。
  • (-) TCP报文重传可能导致延迟,因此不是实时的。
  • (-)代理可能会增加进一步的延迟,导致它更不实时。

如果您必须经常传输数据,那么使用Sockets是有意义的。您可以长时间保持连接打开,在同一通道内发送数据包,并且不会浪费资源在每次传输时重新打开它。

我考虑了各种选项:http, xmpp,自定义套接字实现…最后我偶然发现https://github.com/Gottox/socket.io-java-client。轻松地工作。我很快就爬起来跑起来了!当然,我用的是socket。早期项目中的IO。我从没想过会有一个socket.io的java客户端!我想我没有问对问题。到目前为止,这个解决方案运行得非常好。我将测试和张贴更新,如果有的话。如果您需要实现持久的实时通信,请考虑此选项。

如果要实现套接字。对于出租车应用或大型实时数据传输应用,不要使用socket.io。只需使用firebase或首选http连接。

最新更新