Не существует единственной лучшей модели для написания многозадачных сетевых серверов.Разные платформы имеют разные решения для высокой производительности (порты завершения ввода / вывода, epoll, kqueues).Будьте осторожны при достижении максимальной переносимости: некоторые функции имитируются на других платформах (т. Е. select()
доступна в Windows) и дают очень низкую производительность, поскольку они просто отображаются на какую-то другую собственную модель.
Кроме того, естьдругие модели не включены в ваш списокВ частности, классическая UNIX-модель "pre-fork".
Во всех случаях используйте любую форму асинхронного ввода-вывода, если она доступна.Если это не так, обратите внимание на неблокирующие синхронные операции ввода-вывода.Создайте свою HTTP-библиотеку на основе асинхронной потоковой передачи данных, но не используйте бит ввода-вывода.Это намного сложнее, чем кажется.Обычно это подразумевает написание конечных автоматов для вашего интерпретатора протокола.
Этот последний бит является наиболее важным, потому что он позволит вам экспериментировать с различными представлениями.Это может даже позволить вам написать компактное ядро для каждой платформы с локальными высокопроизводительными инструментами и перенести это ядро с одной платформы на другую.