И все пак кое е по-добро за мобилни устройства TCP или UDP
Бих искал да чуя мнения за плюсовете и минусите на двата протокола по отношение на мобилни устройства, като GPS тракери, които използват мобилни мрежи (обикновено GPRS) за предаване на информация.
UPD: Какво ще се случи с натоварването на сървъра в случаите, когато се използва този или онзи протокол?
Не знам какво, по дяволите, става с нея. Пистата ще е пълна с дупки.
Важно е да се разбере, че в случай на UDP контролът на доставката се прехвърля към приложния слой. Тоест всичко е решено.
UDP има смисъл да се използва в такива случаи: 1. Ще бъде изпратена една заявка до сървъра и ще бъде получен единичен отговор, който ще бъде опакован в един пакет (предаването на данни е по-лесно от установяването на TCP връзка) 2. Има поток от данни в реално време и в случай на загуба или забавяне на мрежов пакет е по-добре тези данни да се загубят напълно, отколкото да се изпращат отново (TCP връзката само ще пречи) 3. Планирани са мултикаст реализации за този протокол (TCP по принцип не е добър)
Във всички останали случаи е по-добре да използвате TCP
Независим от терминала. Зависи от "приложението". Няма да получите ping/rtt с TCP, но е по-лесно да „хоризонтално“ мащабирате сървърите. С UDP е по-лесно да се адаптирате към наистина лоши канали, да избегнете чудесата на таксуването (плащате за повторно изпращане на данни, но само неговият стек знае колко данни не са достигнали TCP), но ще има трудности с проксита и nat.
Ако за gps тракера, тогава го направих на UDP. Натрупвате следа и когато данните са докрай за MTU (тук има нюанси, но те могат да бъдат игнорирани за тракера), вие ги изпращате на сървъра. Сървърът мълчи, докато не забележи дупка в пистата (или веднъж на n пакета или m минути), той прави заявка за повторение на интервала / s. Клиентът изчиства препраща данните иизчиства пистата до първия поискан интервал (всъщност това е ACK). Ако трябва да намалите забавянето (например тракерът се гледа онлайн), тогава сървърът иска от тракера да намали „MTU“ с x секунди (всъщност това може да е поле в заявката за препращане). На тракера напишете в пистата информация за изключения тракер. Песента се съхранява във файл, използван като лентово устройство, така че няма fseek освен връщане назад към началото на файла.