Если ваша единственная проблема с TCP - это дополнительные издержки, я бы не стал слишком беспокоиться.Конечно, TCP имеет больше накладных расходов, чем UDP.Тем не менее, накладные расходы не это много, особенно для скромного объема данных, которые вы, вероятно, будете отправлять.Несколько быстрых обратных расчетов конверта:
Предположим, вы хотите отправлять информацию о состоянии каждую миллисекунду.(Вероятно, чаще, чем вам действительно нужно.)
Предположим, что ваши отдельные сообщения могут легко помещаться в пределах 50 байт / каждое.(Возможно, больше, чем вам действительно нужно.)
Общая пропускная способность 50 байтов / мс = 400 бит / мс = 400 кбит / с
Даже с этимисообщения большего размера, чем необходимо, и обновления, которые быстрее, чем нужно, ваша общая пропускная способность составляет всего около 5% от медленной беспроводной сети 802.11b.Дополнительные издержки TCP вряд ли будут иметь здесь большое значение.
Лично я склонен придерживаться TCP, если у меня нет веских причин не делать этого.Конечно, вы можете сохранить некоторые дополнительные биты, используя UDP, но для меня надежная доставка (включая правильно упорядоченные данные, не дублированные данные) стоит дополнительных затрат.Еще одна вещь, о которой стоит беспокоиться.
РЕДАКТИРОВАТЬ: TCP имеет некоторые другие недостатки.В частности, для создания начального соединения и анализа отдельных сообщений из потока байтов может потребоваться немного больше усилий по программированию.UDP, безусловно, может облегчить эти задачи.Однако вы не указали в качестве одного из критериев сложность программирования, поэтому я сосредоточился на ваших дополнительных вопросах.
ЗАДЕРЖКА: Как отмечается в комментариях ниже, задержка является критическим фактором.В этом случае UDP имеет некоторые существенные преимущества: если пакет отброшен, TCP будет ожидать повторной передачи этого пакета перед отправкой других.Преимущество этого подхода заключается в том, что данные гарантированно поступают в исходном порядке.(Большой плюс, когда сообщения должны обрабатываться последовательно.) Недостатком, конечно, является то, что может быть значительная задержка для новых данных.
UDP, с другой стороны, продолжит отправку последующих пакетов, дажеесли кто-то упал.Хорошая новость заключается в том, что UDP уменьшает задержку оставшихся пакетов.Плохая новость заключается в том, что вы должны добавить своего рода «повтор» в случае потери отдельных событий - если вы это сделаете, у вас есть случаи, когда жесты приходят не по порядку , возможно, значительно,Может ли ваше приложение справиться со случаем, когда «переместить, затем щелкнуть» будет заменено на «переместить, затем переместить»?Если вы выбрали путь UDP, вам нужно тщательно продумать все эти случаи, чтобы убедиться, что это не вызовет (возможно, незначительные) проблемы в вашем приложении.