Hola.
Pravilo broj jedan - tko mi savjetuje da se ostavim UDP-a i okrenem TCP-u, nek slobodno potrazi neki drugi thread.
Imam task dizajnirati novi highperformance protokol. Glavne karakteristike su da ispucava povelik broj malenih paketa i mora imati transport control jer je svaki paket bitan. Tipicni jeftin nacin za ostvarivanje transport controla je ACK/NAK kontrola, no ovo je pogodnije za velik MTU, a ne bas za sisteme koji spamaju pakete, i moglo bi zagusiti bandwidth vrlo skoro.
Malo sam istrazivao UDT, i iako ima odlican congestion control, nije mi prigodan zbog toga jer kod UDT-a, veci MTU je bolji.
NDA je poprilicno striktan pa ne mogu bas puno laprdati o sistemu, no u bazi s jedne strane se nalazi n agenata, s druge strane cluster (tj. bolje receno cloud) s brdom procesa koji procesiraju podatke s agenata. Average payload je 32-64 bytea, max 128.
S obzirom da bi bilo idealno da komunikacija bude jednosmjerna koliko god je to moguce, ideja na koju sam dosao je ova:
Init:
1. Agent salje sinkronizacijski paket u server cluster sa vrijednoscu brojaca i max. vrijednoscu brojaca
2. Server ACK-a sinkronizaciju
Best case Komunikacija:
1. Agent salje numerirane pakete i pritom inkrementira brojac. Poslani paketi se spremaju u history queue koji ima tocno onoliko mjesta, koliko i max vrijednost brojaca. Kad dostigne max vrijednost, resetira brojac na nulu i nastavlja.
2. Server prima pakete i inkrementira svoj brojac, i pritom pazi da pristigli paketi imaju tocan redoslijed. Takodjer kalkulira checksum paketa i testira da li je sve OK
Dupli paket fail:
1. Server ignorira dupli paket
Paket u pogresnom redoslijedu:
1. Server discarda paket i pocinje spamati agenta s paketom koji trazi nastavak komunikacije od odredjenog broja. Server nastavlja spamanje sve dok ne dobije paket s odgovarajucim brojem.
2. Cim agent primi resinkronizacijski paket od servera, pocinje iz historya slati pakete redom od broja koji server trazi, dok ne dodje do HEAD-a. Dupli paketi koje je server poslao se discardaju.
Missing packet:
- Ista procedura kao i za pogresan redoslijed.
Resync:
- Prilikom reseta brojaca, salje se resync paket da bi klijent znao da je server jos uvijek 'ziv'.
- Server ACK-a resync paket
U svim failovima, pokusaj resinkronizacije se ponavlja odredjeno vrijeme dok ne nastupi timeout - u tom slucaju se reportira greska i 'prekid' komunikacije.
Ideje, komentari, sugestije, kritike... :-)