TCP против надежного UDP

Я пишу приложение, в котором клиентская сторона будет загружать данные на сервер по беспроводной связи.

Соединение должно быть очень надежным. Ожидается, что соединение будет разорвано много раз, и к серверу будет подключено много клиентов.

Я запутался, использовать ли TCP или надежный UDP.

Пожалуйста, поделитесь своими мыслями.

Благодарю.

4 ответа

RUDP, конечно, не является формальным стандартом, и нет никаких сведений о том, найдете ли вы существующие реализации, которые вы можете использовать. Если бы у меня был выбор между развертыванием этого с нуля и повторным созданием TCP-соединений, я бы выбрал TCP.

На всякий случай я бы пошел с TCP только потому, что это надежный, стандартный протокол. Недостаток RUDP заключается в том, что он не является установленным стандартом (хотя он упоминался в нескольких дискуссиях IETF).

Удачи с вашим проектом!

Вполне вероятно, что ваши TCP и RUDP ссылки будут нарушены вашей средой, поэтому тот факт, что вы используете RUDP, вряд ли поможет вам; вероятно, будут времена, когда никакие дейтаграммы не смогут пройти...

На самом деле вам нужно убедиться, что: а) вы можете обрабатывать количество подключенных клиентов, б) протокол вашего приложения может достаточно быстро обнаруживать потери соединения с клиентом (или сервером) и в) вы можете обрабатывать требуется переподключение и поддержание состояния сеанса кросс-соединения для клиентов.

Пока вы имеете дело с пунктами b) и c), на самом деле не имеет значения, будет ли разорвана связь. Удостоверьтесь, что вы разрабатываете протокол приложения так, чтобы вы могли выполнять задачи в короткие партии; поэтому, если вы загружаете файлы, убедитесь, что вы отправляете небольшие блоки и что протокол приложения может возобновить передачу, которая была прервана на полпути; Вы не хотите проходить через 2 ГБ 99% трафика, теряете соединение и должны начинать заново.

Для этого вашему серверу необходим некоторый кэш состояния сеанса клиента, в котором вы можете сохранить логическое состояние соединения клиента за пределами срока действия самого соединения. Проектируйте с самого начала, чтобы ожидать, что данный сеанс будет включать несколько отдельных соединений. Состояние сеанса, возможно, должно иметь какое-то время ожидания, поэтому, если клиент уходит на длительное время, он не продолжает потреблять ресурсы на сервере, но, если честно, это может быть просто случай сохранения состояния на диск после какое-то время.

Таким образом, я не думаю, что выбор транспорта имеет значение, и я хотел бы начать с TCP, по крайней мере, для начала. Что действительно важно, так это возможность управлять состоянием сеанса вашего клиента на сервере и учитывать тот факт, что клиенты будут регулярно подключаться и отключаться.

Если вы не уверены, скорее всего, вам следует использовать TCP. Во-первых, он наверняка будет частью сетевого стека для всего, что поддерживает IP. "Надежный UDP" редко поддерживается сразу после установки, поэтому у вас будет дополнительная поддержка для ваших клиентов.

Другие вопросы по тегам