FCGI / SCGI: теоретический материал о мультипроцессировании
Я собираюсь написать сервер FastCGI / SCGI (независимые реализации), но у меня нет большого опыта работы с сетевыми и особенно с отложенным программированием приложений.
У меня возникает теоретическая проблема, когда я подробно думаю о том, что я хочу сделать. Когда веб-сервер отправляет запрос TCP на мой сервер, входные данные (байты) будут обрабатываться текущим обработчиком (либо обработчиком FastCGI / SCGI). Проблема в том, что произойдет, если для создания ответа потребуется некоторое время? Допустим, клиент запрашивает большой файл размером около 10 МБ. Прав ли я, что серверу нужно подождать, пока 10 МБ не будут сброшены на клиент? Итак, есть вывод: если у клиента низкое интернет-соединение, мой сервер блокируется до тех пор, пока не будут сброшены все 10 МБ, не так ли?
Что касается запросов на обработку, которые, например, должны выполнять операторы SQL, им нужно время. Сервер будет заблокирован на это время, не так ли? Пожалуйста, поправьте меня.
Чтобы решить эту проблему, моя единственная идея - использовать потоки - и я не очень разбираюсь в них. И если я правильно понял протокол SCGI, то потоки не являются решением, поскольку он ожидает немедленного ответа на запрос. Вместо FastCGI, который поддерживает идентификаторы запросов. Каким было бы ваше решение?