UDP -servrar är obekväma för användning som samtidiga servrar främst på grund av deras
Connectionless natur. Denna brist på anslutning betyder att:
* Ingen inneboende anslutningsspårning: Till skillnad från TCP skapar UDP inte en ihållande anslutning mellan klient och server. Varje UDP -paket behandlas oberoende. Detta innebär att servern inte har något inneboende sätt att spåra vilka paket som tillhör vilken klient, vilket gör det svårt att hantera flera samtidiga klienter effektivt. Du måste implementera dina egna mekanismer (som att lägga till klient -ID till varje paket) för att hantera flera klienter samtidigt och lägga till komplexitet till serverns design.
* Ingen pålitlig leverans: UDP garanterar inte leverans eller beställning av paket. Paket kan gå förlorade, duplicerade eller komma ur ordning. En samtidig server som hanterar flera klienter måste redovisa dessa möjligheter, vilket kräver ytterligare mekanismer som vidarebefordran och sekvensering för att säkerställa dataintegritet och ordning. Detta lägger till betydande omkostnader och komplexitet.
* ingen flödeskontroll: UDP har inte inbyggd flödeskontroll. En snabb klient kan överväldiga en långsammare server med paket, vilket leder till buffertflöden och dataförlust. Servern måste implementera sina egna flödeskontrollmekanismer.
* Ökad komplexitet vid hantering av klientavkopplingar: Eftersom det inte finns någon uttrycklig anslutning av anslutning, upptäcker när en klient frånkopplad mer sofistikerade tekniker än att bara övervaka ett stängt TCP -uttag. Servern måste implementera timeouts och andra mekanismer för att upptäcka klienter som har slutat skicka data.
Däremot förenklar TCP:s anslutningsorienterade natur samtidig serverdesign genom att tillhandahålla inbyggda mekanismer för anslutningsspårning, tillförlitlig leverans, flödeskontroll och anslutning. Dessa funktioner gör att hantera flera klienter mycket enklare och effektivare än med UDP. Medan UDP kan * användas * för samtidiga servrar, är det betydligt mindre effektivt och kräver väsentligt mer komplex programmering för att uppnå samma nivå av tillförlitlighet och hanterbarhet som en TCP -server.