FastCGI / SCGI предварительная вилка
Я пытался реализовать шлюз веб-сервера (для забавы и в образовательных целях), и у меня есть несколько вопросов об архитектуре ядра, лежащей в основе FastCGI/SCGI, относительно модели, предшествующей разветвлению.
Как реализации FastCGI/SCGI управляют связью в сценариях перед форком? AFAIK, шлюз имеет только один сокет для подключения к серверу FastCGI. Обычно есть родительский процесс, который принимает соединения от шлюза и передает работу одному из предварительно разветвленных рабочих.
Поскольку соединения устанавливаются после разветвления дочерних элементов, как вы предполагаете, чтобы дети использовали эти сокеты для связи со шлюзом?
2 ответа
Надеюсь, я понял вопрос.
Сокет сервера должен быть создан родительским процессом; когда он разветвляется, дети наследуют этот сокет, делая его общим ресурсом. Затем, я полагаю, каждый ребенок пытается одновременно принимать () соединения.
В качестве ссылки я нашел этот документ (см. "Принять сериализацию"), в котором обсуждается проблема голодания при прослушивании нескольких сокетов, и это SO-обсуждение совместного использования сокетов.
Один из вариантов - файловый дескриптор, проходящий через сокет домена UNIX. У Стивенса УНП есть базовый пример.