0

在连接不稳定的情况下,我在建立从我的 iOS 应用程序到我的 API 的弹性连接时遇到问题。理想情况下,我想通过重新发送请求到 API 来使连接尽可能有弹性。

进一步来说:

  • 传输正在使用 HTTPs
  • 响应是基于 JSON 的,通常只有几 kB
  • API 托管在 Heroku 上

处理这种“参差不齐的连通性”问题的合适算法方法是什么?似乎很多应用程序都很好地处理了这一点,例如 Discord 上的语音通道或通过 WhatsApp 进行的呼叫。

我目前正在研究:

  • 取消和重新发送请求
  • 通过keep-alive长轮询“预热”HTTPs连接,因为初始加密握手似乎很重
  • 并行发送多个请求

目标是尽可能地消除 RTT。请求很小,但应该很快通过,因为用户不必等待他们的响应。

很高兴知道其他人是如何解决这个问题的。

4

1 回答 1

0

用非常简单的话来说:

  • TCP/IP 是面向连接的——它建立端到端的连接并实现可靠的传输,但可靠性是以牺牲更多开销为代价的
  • UDP/IP 是无连接的 - 它不会提前建立端到端连接或检查已发送数据的接收,因此可靠性可能较低,但速度快且开销低

VoIP 应用程序通常倾向于使用 UDP 作为语音部分——这是因为速度/延迟很重要,偶尔丢包并不是什么大问题。

在必须不丢失任何数据包的情况下,例如建立 VoIP 呼叫的信令、TCP 或检查并重新传输丢失数据包的其他协议通常是首选。

请注意,上述情况也有例外 - 例如,TCP 通常比 UDP 更好地穿越防火墙,由于流量策略的安全原因可能会被阻止,因此 VoIP 语音有时可能至少在其部分旅程中通过 TCP 发送。

听起来 TCP 可能是满足您需求的不错选择 - 还有其他协议,例如 SCTP(https://en.wikipedia.org/wiki/Stream_Control_Transmission_Protocol),但我不确定它们通常会被证明更快对于您描述的通信类型。

于 2017-05-24T10:05:07.017 回答