Sende data - Hvor meget og hvornår?

Tags:    design-pattern cpp network socket

Hej udviklere!

Jeg er ved at skrive et program der modtager en konstant strøm af data - lille men vedvarende (nogle bytes i sekundet). Denne data vil jeg sende til en server der har til opgave at "processe" disse data. Mit spørgsmål til jer er først og fremmest: hvordan skal jeg gøre det? Jeg har allerede implementeret et forholdsvist stabilt IP og Socket library (tak Robert Larsen og MSDN) som har funtionalitet til at sende og modtage data. Men hvornår skal jeg sende data fra klienten? Så snart den modtager et par bytes, så sende dem afsted eller skal jeg hobe dem op og sende pakker med data i et givent interval? Hvad er fordelene og ulemperne ved hver respektive fremgangsmåde?

Et bonus spørgsmål som jeg har tænkt over, er hvilket design pattern jeg skal bruge. Jeg har som sagt en klasse der modtager noget data af en method #append. Jeg har overvejet (da jeg kommer fra JavaScript) at implementere noget callback funktionalitet hvor en klasse nedarver fra en Listener klasse og implementerer en virtuel funktion, men jeg har også bare overvejet at bruge function pointers. En anden tilgang kunne være at implementere socket kaldende direkte i den klasse der modtager data'en - men det vil jeg helst undgå da dette ville være et ret stort tab af generalitet og ville genere min modul-stræbende hjerne.

Any ideas? :)



Indlæg senest redigeret d. 02.01.2012 14:51 af Bruger #11328
5 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 16 karma
Sorter efter stemmer Sorter efter dato
Jeg vil sige, at det kommer an på hvornår serveren skal bruge de data der sendes. Hvis de ikke skal bruges med det samme, så send dem når der er mindt travlt på serveren (om natten). Og er det et krav, at serveren skal bruge data med det samme, så send hele tiden.

Desuden skal du også sørge for, at der holdes styr på hvad der er sendt og ikke sendt. Hvis forbindelsen til serveren forsvinder, så er det rart at dit overførselsprogram selv sender de pakker afsted som ikke er modtaget. Overvej måske at modtageren sender kvitteringer tilbage, så du ved det 100%.



I tilfælde af at du ikke sender hele tiden. Ville jeg foreslå at du gemte data på klienten i filer/database. Således at usendt data ikke bliver tabt, hvis og når klienten crasher. Usendt data kan så sendes når klienten er genstartet.

Hvis du ikke gemmer det, kan du vel risikere at tabe en hel dags data.



Jeg gemmer allerede data lokalt i en temporary file, og ja, "kvitteringer" skal jeg også have implementeret.

pt. tror jeg at jeg sender data i klynger, dvs. for hver x antal byte, men er der nogle fordele eller ulemper, ved at sende i klynger mod at sende så snart en enkelt byte er modtaget?



Der er jo altid noget ekstra i netværkspakker, så sender du en enkelt byte vil der stadig være start+slut info i den tcp-pakke som sendes afsted. Om det betyder noget IRL tror jeg dog ikke.



Det er det samme som jeg har konkluderet, og jeg ved heller ikke om det er noget problem - men da jeg som regel stræber efter (selvom dette er en øvelse) at lave noget optimalt, eller nær ved, ville jeg gerne høre nogen der evt. har stødt på en lignende situation :)



t