TCP против надежного UDP
Я пишу приложение, в котором клиентская сторона будет загружать данные на сервер по беспроводной связи.
Соединение должно быть очень надежным. Ожидается, что соединение будет разорвано много раз, и к серверу будет подключено много клиентов.
Я запутался, использовать ли TCP или надежный UDP.
Пожалуйста, поделитесь своими мыслями.
Благодарю.
4 ответа
RUDP, конечно, не является формальным стандартом, и нет никаких сведений о том, найдете ли вы существующие реализации, которые вы можете использовать. Если бы у меня был выбор между развертыванием этого с нуля и повторным созданием TCP-соединений, я бы выбрал TCP.
На всякий случай я бы пошел с TCP только потому, что это надежный, стандартный протокол. Недостаток RUDP заключается в том, что он не является установленным стандартом (хотя он упоминался в нескольких дискуссиях IETF).
Удачи с вашим проектом!
Вполне вероятно, что ваши TCP и RUDP ссылки будут нарушены вашей средой, поэтому тот факт, что вы используете RUDP, вряд ли поможет вам; вероятно, будут времена, когда никакие дейтаграммы не смогут пройти...
На самом деле вам нужно убедиться, что: а) вы можете обрабатывать количество подключенных клиентов, б) протокол вашего приложения может достаточно быстро обнаруживать потери соединения с клиентом (или сервером) и в) вы можете обрабатывать требуется переподключение и поддержание состояния сеанса кросс-соединения для клиентов.
Пока вы имеете дело с пунктами b) и c), на самом деле не имеет значения, будет ли разорвана связь. Удостоверьтесь, что вы разрабатываете протокол приложения так, чтобы вы могли выполнять задачи в короткие партии; поэтому, если вы загружаете файлы, убедитесь, что вы отправляете небольшие блоки и что протокол приложения может возобновить передачу, которая была прервана на полпути; Вы не хотите проходить через 2 ГБ 99% трафика, теряете соединение и должны начинать заново.
Для этого вашему серверу необходим некоторый кэш состояния сеанса клиента, в котором вы можете сохранить логическое состояние соединения клиента за пределами срока действия самого соединения. Проектируйте с самого начала, чтобы ожидать, что данный сеанс будет включать несколько отдельных соединений. Состояние сеанса, возможно, должно иметь какое-то время ожидания, поэтому, если клиент уходит на длительное время, он не продолжает потреблять ресурсы на сервере, но, если честно, это может быть просто случай сохранения состояния на диск после какое-то время.
Таким образом, я не думаю, что выбор транспорта имеет значение, и я хотел бы начать с TCP, по крайней мере, для начала. Что действительно важно, так это возможность управлять состоянием сеанса вашего клиента на сервере и учитывать тот факт, что клиенты будут регулярно подключаться и отключаться.
Если вы не уверены, скорее всего, вам следует использовать TCP. Во-первых, он наверняка будет частью сетевого стека для всего, что поддерживает IP. "Надежный UDP" редко поддерживается сразу после установки, поэтому у вас будет дополнительная поддержка для ваших клиентов.