obsluga klientow na procesach to debilizm w czystej postaci.
ilosc procesow dzialajacych w jednej przestrzeni adresowej powinna byc = ilosci rdzeni na CPU, a zadania dzielone na kazdy z nich. Tzn optymalny stan jest wtedy, kiedy kazdy watek/proces jest aktywny w 1 momencie. Kazdy watek/process powinien byc tworzony dokladnie w tym samym miejscu, a ich zadanie sterowane mutexami. od windows, kazdy watek powinien rowniez obserwowac nastepny, tworzac taka liste jednostronna. Ze jak jeden zostanie zabity, mozna wywalic proces. To jest koneczne, ze wzgledu fakt ze ubijajac watek pewne zasoby sa skazane na zostanie w pamieci tak dlugo jak dziala caly proces co prowadzi do potencjalnego Denial Of Service.
Będę wdzięczny za jakiekolwiek wskazówki, ew. linki do dokumentacji gdzie mogę te zagadnienie znaleźć.
jesli robisz cos na zaliczenie/zlecenie - odpusc sobie. Nie wyrobisz sie. Gdy bedziesz mial wiedze odpowiednia do realizacji projektu - nie bedziesz potrzebowal dokumentacji.
Serwer używa funkcji select(), co mogę zrobić w takim przypadku by móc pobrać jakiekolwiek dane, dzięki którym serwer może ich rozróżnić?
tworzysz strukture, taka dosc nietypowa:
pierw handle do socketow, pozniej pointer na dane + callback.
dane to przyporzadkowany id klienta, callback to funkcja ktora sie wywola jak select() zwroci.
najwazniejsze to zeby po rozlaczeniu klienta przywracac id do postaci ciaglej. tzn dekrementowac kazdego nastepnego klienta, oraz wszystkim wyslac wiadomosc 'klient XX wypadl', by przed inicjalizacja wysylania danych mogli odswiezyc rekord, a w razie jej trwania - zmienic niz wysylac dane do starego.
W c tego nie napiszesz btw ;) A nawet jak ci sie uda to kod pedzie paskudny.
...zaraz, select + winsock? czy ja oczyms nie wiem?
select to pod linuxa, winsock ma swoje funkcje, ja polecam WriteFile/ReadFile OVERLAPPED, a oczekiwanie na eventy. Nie uzywaj funkcji ReadFileEx/WriteFileEx bo APC nie przyjmuje argumentow - wiec nie mozesz jej przekazac zmiennej a wtedy ich sens mija sie z celem. WSASend/WSARecv tez do kitu bo musisz sie [CIACH!] w WSABUF (tzn zaalokowac dodatkowa strukture, zeby tylko w niej adresowac bufor i jego rozmiar anizeji przekazac to na stosie, a ilosc WSABUF jest bez sensu.)
Nie poradzisz sobie, za duzo rzeczy o ktorych trzeba pamietac.