UDP optymalne wykrywanie polaczenia

0

witam, mam taki problem, poniewaz chcialbym zrobic jak najbardziej optymalny 'wykrywacz' polaczen, ktory mialby na celu sprawdzac czy dany klient w jakis sposob komunikuje sie z serwerem. Zrobilem tak, ze kazdemu z osobna klientowi, ktory sie podlaczyl (zrobilem taki system podłaczania się) tworzylem watek, gdzie co 10 sekund wysylalem pewnego rodzaju zapytanie do klienta, ktory musial wysylac serverowi odpowiedz. Jezeli odpowiedz nie docierala po uplywie 10 sekund to zrywalem umowne polaczenie i server nie komunikowal sie juz z tym klientem, po czym opuszczalem watek. Przy wyzszej liczbie klientow np. 100 to wszystko zaraz sie sypie. Gdzies 6,7 klientow z tej calej liczby ma tzw. losta, czyli server zerwal z nim kontakt. Znacie moze lepsze i optymalniejsze sposoby na sprawdzanie komukacji SERVER-KLIENT na podstawie protokolu UDP? Bardzo chetnie wyslucham waszych patentow, pomyslow.

0

Po pierwsze, odpowiedzi nie dostałeś w tych 6 na 100 przypadkach, bo pewnie pakiet danych zgubił się po drodze... takie uroki UDP.

Nie musisz dla każdego połączenia tworzyć takiego wątku.. możesz mieć jeden wątek, który sprawdza wszystkich co jakiś czas. Przede wszystkim przez te połączenia wysyłasz jakieś dane, więc nie trzeba zawsze wysyłać pakietu sprawdzającego. Za każdym razem gdy dostajesz jakieś dane, oznaczaj połączenie, że dostało jakiś pakiet o czasie t. Wątek sprawdzający będzie brał pod uwagę tylko te połączenia, które nie dostawały żadnych danych przez długi czas... mógłby wysyłać heartbeat po 10 sekundach i powtarzać to co 2-3 sekundy, aż nie dostanie odpowiedzi, lub od ostatniego otrzymania danych nie minie jakiś określony czas (np 30 sekund)

0

hmm, zalozmy gdybym 'wykrywacz' sprawdzania ustawil na 10 sekund i gdy kazda odpowiedz od klienta docierala w czasie dluzej niz 10 sekund to zwiekszal bym status klienta 'Niedostepnosci' o +1. Gdyby status niedostepnosci osiagnal numerek '3' to bylby dla mnie znak ze klient zerwal z serverem kontakt. Czyli w sumie pelnokrwisty timeout trwal by 30 sekund. 3 * 10 sekund. Jak myslisz wypali cos takiego, czy protokol jest bardziej podatny na gubienie pakietow?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0