Potrzebuję napisać serwer, który akceptuje połączenia z wielu maszyn klienckich, utrzymuje ścieżkę połączonych klientów i wysyła dane klientów indywidualnych, jeśli to konieczne. Czasami można połączyć się z wszystkimi klientami za pomocą tej samej wiadomości, innym razem może to być jeden pojedynczy klient lub grupa klientów.Wiele połączeń z gniazdami
Ponieważ potrzebuję potwierdzenia, że klienci otrzymali informacje i nie chcą budować struktury ACK dla połączenia UDP, zdecydowałem się użyć metody strumieniowania TCP. Jednak staram się zrozumieć, jak utrzymywać wiele połączeń i utrzymywać je w stanie bezczynności.
Wydaje mi się, że mam trzy opcje. Użyj widelca dla każdego przychodzącego połączenia, aby utworzyć oddzielny proces potomny, użyj pthread_create, aby utworzyć cały nowy wątek dla każdego procesu lub użyj select(), aby poczekać na wszystkie otwarte identyfikatory gniazd dla połączenia.
Zalecenia dotyczące sposobu ataku na to? Zacząłem pracować z pthreads, ale ponieważ wydajność prawdopodobnie nie będzie problemem, przetwarzanie wielordzeniowe nie jest konieczne i być może istnieje prostszy sposób.
Jako notatkę, pracuję w C/C++ – BSchlinker
Należy również wspomnieć, liczba połączeń do tego systemu są statyczne. Nie jest to maszyna stojąca publicznie (połączenia nie będą się zmieniać z upływem czasu - tj. Nie widzę problemu z wydajnością). – BSchlinker
Osobiście chciałbym multipleksować przy użyciu select(), lub najlepiej kqueue(), jeśli działa na mac lub bsd. Jednak jedna z trzech opcji zadziałałaby, a opcje pthread/fork są bardzo łatwe do wdrożenia, jeśli serwer będzie miał niską liczbę klientów i małą rywalizację o klienta. –