Повышение устойчивости телефонного соединения с API к API
У меня возникают проблемы с созданием эластичного соединения между моим приложением iOS и API в случае нестабильных подключений. В идеале я хотел бы сделать соединение максимально устойчивым, например, повторно отправляя запросы в API.
Более конкретно:
- Транспорт использует HTTP
- Ответ основан на JSON, обычно всего несколько кБ
- API размещен на Heroku
Каков был бы подходящий алгоритмический подход для решения такой проблемы "пятнистой связности"? Кажется, что многие приложения справляются с этим хорошо, например, голосовые каналы на Discord или звонки через WhatsApp.
В настоящее время я изучаю:
- Отмена и повторная отправка запросов
- "Разогрев" HTTP-соединения с помощью продолжительного опроса keep-alive, поскольку первоначальное крипто-рукопожатие кажется довольно тяжелым
- Отправка нескольких запросов параллельно
Цель состоит в том, чтобы максимально устранить RTT. Запрос небольшой, но должен пройти быстро, потому что пользователь не должен ждать своего ответа.
Рад узнать, как другие решили это.
1 ответ
В очень простых сроках:
- TCP / IP ориентирован на установление соединения - он устанавливает сквозные соединения и обеспечивает надежную передачу, но надежность достигается за счет некоторых дополнительных затрат
- UDP/IP не устанавливает соединения - он не устанавливает заранее сквозные соединения и не проверяет получение отправленных данных и, следовательно, может быть менее надежным, но он быстрый и имеет низкие издержки
Приложения VoIP обычно предпочитают UDP для речевой части - это потому, что скорость / задержка важна, а случайная потеря пакетов не такая большая проблема.
Там, где важно не потерять какие-либо пакеты, например, сигнализация для установки вызовов VoIP, TCP или другой протокол, который проверяет и повторно передает потерянные пакеты, как правило, предпочтительнее.
Обратите внимание, что есть исключения из вышеперечисленного - например, TCP обычно проходит через брандмауэры лучше, чем UDP, который может быть заблокирован из-за соображений безопасности из-за политики трафика, поэтому иногда речь VoIP может отправляться через TCP, по крайней мере, для части пути.
Похоже, что TCP, вероятно, является хорошим кандидатом для ваших нужд - есть и другие протоколы, такие как SCTP ( https://en.wikipedia.org/wiki/Stream_Control_Transmission_Protocol), но я не уверен, что их можно показать как можно быстрее для типа общения вы описываете.