Задать вопрос

Высоконагруженный сокет-сервер?

Доброго времени суток, уважаемые хабровчане!



Пишу свой первый высоконагруженный сокет сервер (порядка 5000к клиентов) под *nix. Алгоритм таков, что соединение с клиентом нужно держать, пока он сам его не разорвет.

Вопрос. Как правильно организовать многопоточность и IPC?

ОС: *nix.

Язык: C++.



Что уже искал. Гугл дает реализации, в которых процессы с потоками отрабатывают запрос и отключаются…

Мне же необходимо активным потокам взаимодействовать с родителем, или чем-нить еще, для постоянного обновления статистики… (вариант с БД пока не приемлем)

Подскажите, пожалуйста, идею или где копнуть, как реализовать сервер с такой нагрузкой, т.е. как правильно упорядочить accept()+fork()+pthread_create() и какой вид IPC лучше подойдет для такого рода нагрузок? Что из видов IPC сможет выдержать нагрузки в 5-10к клиентов? с минимумом задержек естественно…



Изучая исходники Open Source веб-серверов, ничего не получил… ибо «отрабатывают запрос и отключаются»…



я правильно понял, что это не больно-то тривиальная проблема?



Спасибо.
  • Вопрос задан
  • 7911 просмотров
Подписаться 8 Оценить 1 комментарий
Ответ пользователя korvindest К ответам на вопрос (7)
@korvindest
Мне кажется вам лучше смотреть в сторону openSource СУБД типа PostgreSQL ведь СУБД то как раз должны держать коннект, до тех пор пока он не будет разорван клиентом.

Хотя конечно, подозреваю, что выковыривать от туда сей механизм будет не просто.
Ответ написан