Sockets aplikacja serwera

0

Witam
Chciałbym napisać aplikacje w c++ obsługującą wiele połączeń (klientów) naraz w której liczy się kolejność nadejścia danych, ze względu na możliwą dużą ilość klientów serwer może być obciążony.
Serwer chce napisać na 90% pod linux'a..
Wiem że jest kilka podejść do pisania takiego serwera, do tej pory pisałem aplikacje klient serwer w których nie było aż takiego obciążenia lub nie liczyła się kolejność nadejścia danych, to co chcę napisać można porównać do czatu a więc liczy się czas nadejścia wiadomości.

Widziałem przykłady i różne podejścia, chciałbym zapytać który waszym zdaniem najlepiej nadawałby się do takiego czegoś, przyjmijmy ze jest to serwer czatu. Zakładam że może być około 30.000 połączeń max.

1 podejście to FD_SET czyli lista gniazd sprawdzana w pętli
2 podejście to serwer oparty wątkach (każdy klient jeden wątek)

Podejście pierwsze jest dla mnie zrozumiałe ale podobno klienci mogą być odrzucani, drugie podejście myślę że jest ok tylko nie bardzo wiem jak to trzeba byłoby zsynchronizować.

Może ktoś z was miał z takim czymś do czynienia lub zna inne rozwiązanie bądź czytał gdzieś o czymś takim? Może macie jakieś sugestie?

0

Użyj wysokopoziomowych bibliotek typu boost asio. Asio jest przenośne, nowoczesne, wydajne i dojrzałe na tyle że za 2 lata stanie się częścią standardu c++. A i jeszcze jedno. 30000 połączeń to nie jest dużo. Dużo to milion.

0

Zakładasz, że będziesz miał ok 30 000 połączeń i uważasz, że podejście wątek per połączenie będzie dobre? : /
Select ma ograniczenie do 1024 otwartych deskryptorów per proces. Użyj epolla, czy de facto użyj boost.asio (przy okazji poznasz proactor pattern) albo jeszcze czegoś innego np. libevent/zeromq.

Odnośnie powyższego wpisu to już teraz możesz zamiast asio użyć proposala dla c++17 http://think-async.com/

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