serwer, wątki

0

Cześć :)
Pytania dt. dalszego ciągu komunikatora.
Otoź, na sygnał newConnection() odbieram pakiet od serwera.
Po pierwsze zastanawiam się jak to zoorganizować. Po odebraniu wiadomości przez serwer chcę do nadawcy wysłać potwierdzenie (jakiś mały pakiecik ). W takim razie czy muszę mieć wątek w kliencie ciągle sprawdzający czy socket nic nie wysłał?

Teraz same wątki po stronie serwera.
Najprościej byłoby napisać, że każde nowe połączenie to nowy wątek, który tam już obsługuje połączenie. Po wstępnym rozeznaniu ( rodzaju komunikatu) oddaje robotę innemu wątkowi, który już dalej sobie przetwarza.
Ale spodziewam się, że w ten sposób powstanie dużo wątków i ciągłe przełączanie pomiędzy nimi obniża znacznie wydajność. Wobec tego myślę o tym, żeby mieć listę odaplonych wątków, z których każdy zlicza sobie ile ma do obsługiwania socketów. I przy nowym połączeniu poszukuję takiego wątka, który ma mniej niż określona jakąś tam liczba. To właśnie jemu powierzam klienta.
Dobry pomysł? Jak lepiej?

1

Hasła dla google:
Assynchronic TCP
ThreadPool

0

No dobrze, to już wiem, że komunikacja przez TCP wymusza potwierdzenie odebrania.
Założmy następującą sytuację:
Klient A wysyła wiadomość do klienta B. Klient B nie jest podłączony ( albo był, ale w momencie wysyłania się rozłączył ). Serwer odbiera wiadomość od A. I próbuje ją nadać B. Ponieważ klienta B nie ma ( zniknął w ostatniej chwili ) serwer próbuje bezskutecznie kilku prób przesyłania. Po jakimś czasie musi zrezygnować. Jak mogę się o tym dowiedzieć, jeżeli chcę zapisać tą wiadomość w bazie?

0

TCP po jakimś czasie przekazuje informacje że klient się rozłączył.
Masz to w obsłudze błędów.

0

Zobacz sobie w jaki sposób korzysta się z IOCP na Windows i jaki model w gruncie rzeczy wymusza.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365198%28v=vs.85%29.aspx

http://www.codeproject.com/Articles/13382/A-simple-application-using-I-O-Completion-Ports-an
Tutaj masz przykładowy kod serwera.

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