Добрался я наконец до FCGI, но вот только ночью(
Вот спека, которую я нашёл в сети:
https://www.mit.edu/~yandros/doc/specs/fcgi-spec.htmlЯ писал выше про мультиплексирование, находясь в полном бреду :-)
Но внезапно FCGI его поддерживает. Более того, туда и event loop можно затащить.
> This supports applications that are able to process concurrent requests using event-driven or multi-threaded programming techniques.
Ещё выяснилось, что там могут быть 3 роли, которыми может быть FCGI приложение:
- Responder
- Authorizer
- Filter
Responder - это обычная обработка запросов.
Authorizer - для auth, если вернули 200, то auth прошёл (раздел 6.3)
Filter - не совсем понял, но чо-то типа FCGI приложение получает http запрос + file с web server-а и отдаёт фильтрованную версию данных (6.4)
В запрсах есть requestId, причём если поле занимает несколько байт, то у них там добавляется в структуре специальный суффикс B<n>, который говорит о том, какой это байт при склейки байтов.
Есть управляющие запросы, в которых web server спрашивает приложение о разных параметрах работы:
- сколько коннекции конкрентных к нему можно держать (FCGI_MAX_CONNS)
- сколько запросов могут быть конкурентных (FCGI_MAX_REQS)
- есть ли мультиплексирование (FCGI_MPXS_CONNS)
Удивило, что написано, какие дескрипторы должны быть у приложения закрыты (stdout, stderr) и что вместо stdout должен быть сокет web server-а.
Казалось бы какая разница?) Видимо отголоски CGI.
Короче, FCGI норм.