Socket timeout problemer
I et forsøg på at lære lidt om netværks programmering, har jeg lavet et mindre besked system. Det har kontaktliste, forskellige statuser (online, invisible, offline) og nogle andre ting. Det er opbygget så det er objekter der sendes og ikke bare Strings. For at gøre det lidt mere udfordrende. Det er selvfølgelig opbygget som en flertrådet server så der kan være flere brugere online på samme tid.Jeg har så lavet så når klienten sætter sin tilstand til offline, så sender den et state objekt til serveren som så lukker forbindelsen ned og fjerner den worker som klienten snakker med. Det virker fint på lan hvor chancen for at forbindelsen bliver afbrudt ikke er ret stor. Mit spørgsmål er så, hvordan skal man tage højde for de uventede ting?
Eks. forbindelsen på en klient forsvinder, så får den aldrig afsendt nedluknings objektet til klienten.
Hvad vil der ske i den situation? Vil man få en exception? og hvis det nu var tilfældet, skulle man så catche den og sige at når det sker så lukker man workeren ned?
Jeg havde tænkt på IRC principet, hvor serveren hele tiden spørger klienten om den er der, ping? hvor klienten så svarer ping! Hvis tingene ikke kommer frem inden for et given tidsrum, så ved serveren at personen er timeoutet. Og klienten ved at den er blevet disconnected. Kunne man implementere sådan en løsning?
Server: alive? klient: yes!
Serveren sender en string til klienten, og hvis den ikke får noget reply inden for et given tidsrum. Så ved den at der er gået noget galt og den skal lukke workeren ned og sætte det ID som workeren svarer til offline. Ligeledes på klientens side, hvis den ikke får noget alive? request fra serveren, så ved den at der ikke er forbindelse til serveren, og så sætter den klienten værende som offline. Når man så går offline igen, så vil den genoprette forbindelsen og en ny worker vil blive oprettet.
Er det en totalt tosset ide?
