Witam.
Zastanawiam się ostatnimi czasy, jaką drogą najlepiej pójść w budowaniu serwera TCP.
Przyjmijmy, że mamy serwer, który jednocześnie obsługuje po 300 socketów, średnio utrzymujących łącze przez 2 godziny dla każdej jednostki. W międzyczasie, każdy socket, w zależności od zaangażowania w aplikację wysyła po 5 pakietów co sekundę, średniej wielkości 30 byte'ów.
Każdy socket ma swój buffer, do którego wpisujemy średnio 10 pakietów na wysłanie co ok. 500ms, zaraz po Read'zie. Średnia wielkość pakietu to +/- 40 byte'ów.
Skracając:
-> 300 clientów,
-> client wysyła ok. 5 pakietów na sekundę, średniej wielkości 30 byte'ów, które są splitowane w kilka sendów (max. 2/3 pakiety na jeden recv),
-> server odsyła ok. 10 pakietów co sekundę, średniej wielkości 40 byte'ów, które są bufferowane w jeden send.
Najważniejsza odpowiedź, którą chciałbym uzyskać to:
- czy bawić się w pojedynczy thread dla każdego socket'u,
- bawić się w TcpListener i otwieranie async'u dla każdego nowego połączenia,
- jeśli tak:
- synchronous send/recv?
- asynchronous send/recv?
- bawić się w jeden Thread, który zajmie się handlowaniem przychodzących połączeń/wysyłaniem pakietów/czytaniem pakietów?
Dziękuje i za dodatkową literaturę kłaniam się bardzo nisko.