Конференция "Сети" » Многопоточный порт-маппед
 
  • Maloj2007 © (10.04.11 03:40) [0]
    Здравствуйте! Хочу посоветоваться по поводу написания многопоточного порт-маппеда. Существует ТЗ вобщем-то из него и исхожу. Готовых вариантов подходящих под ТЗ не нашел (может кто подскажет?) потому пишу сам.
    ТЗ:
    Создать порт-маппед приложение (серверная часть), для защиты трафика основного сервера путем шифрования. Информация о нагрузке:
    - Среднее количество клиентов 1000, пиковая нагрузка 5000.
    - Среднее время подключения клиента 5 часов.
    - Объем трафика за время сессии ~10 мегабайт.
    - Пакеты размером от 4 байт до 2 килобайт.
    - Среднее количество пакетов в минуту ~500.

    Вобщем-то сам вопрос состоит в том, каким алгоритмом реализовывать приложение. От Indy и подобных компонентов отказался сразу. Писать буду используя WinSock API. От выделения на каждого клиента отдельного потока отказался сразу, ввиду большого количества клиентов и большой продолжительности сессии. Остановился на варианте создания пула потоков (50-100 потоков) и на них распределить нагрузку путем выбора select'ом сокетов с которых необходимо получить данные. Алгоритм примерно такой: 1 поток отводим для обработки подключений клиентов, 1 поток отводим для вызова select'ов, после получения списка сокетов требующих обработки, распределять те самые сокеты по пулу. В случае если все потоки в пуле заняты, ставить сокеты в очередь для обработки.
    Готов выслушать критику относительно алгоритма. Возможно кто-то подскажет более действенное решение.
  • Вариант (10.04.11 11:29) [1]
    Почитай про порты завершения ввода/вывода (I/O Completion Ports). Хорошо описаны у Рихтера и Кларка в книге "Программирование серверных приложений для Microsoft Windows 2000", а так же описаны в книге "Программирование в сетях Windows" у Джонса и Оланда.
  • Polevi © (18.04.11 22:51) [2]
    один поток транспортный - асинхронные WSA вызовы с CompletionRoutine
    данный поток получает данные, кладет их в очередь на обработку, мониторит очередь на отправку, отправляет

    пул рабочих потоков
    мониторит очередь на обработку, обрабатывает, кладет в очередь на отправку.
    его лучше организовать через compleation ports (см. Вариант   (10.04.11 11:29) [1] )
    при этом число рабочих потоков не будет привышать колво процессоров (ниток) x2
 
Конференция "Сети" » Многопоточный порт-маппед
Есть новые Нет новых   [134437   +27][b:0][p:0]