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

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

9 голосов
/ 14 ноября 2010

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

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

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

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

Спасибо.

Ответы [ 4 ]

6 голосов
/ 14 ноября 2010

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

4 голосов
/ 14 ноября 2010

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

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

3 голосов
/ 15 ноября 2010

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

В действительности вам нужно убедиться в том, что a) вы можете обрабатывать количество подключенных клиентов, b) протокол вашего приложения может обнаружить достаточно быстрокогда вы потеряли связь с клиентом (или сервером) и c) вы можете обрабатывать необходимое переподключение и поддерживать состояние сеанса кросс-соединения для клиентов.

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

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

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

0 голосов
/ 14 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...