纪录的通用结构:
typedef struct {
unsigned char version;
unsigned char type;
unsigned char requestIdB1;
unsigned char requestIdB0;
unsigned char contentLengthB1;
unsigned char contentLengthB0;
unsigned char paddingLength;
unsigned char reserved;
unsigned char contentData[contentLength];
unsigned char paddingData[paddingLength];
} FCGI_Record;
其中重点关注:contentData,不同的类型纪录,关键在于type 及contentData数据的不同;type取值:FCGI_GET_VALUES, FCGI_GET_VALUES_RESULT,FCGI_BEGIN_REQUEST,FCGI_PARAMS,FCGI_ABORT_REQUEST,FCGI_END_REQUEST等等;
1.管理纪录类型和应用纪录类型,管理用于获取php-fpm的状态,FCGI_GET_VALUES, FCGI_GET_VALUES_RESULT;应用纪录用于请求响应:FCGI_BEGIN_REQUEST记录开始一个请求(role:FCGI_RESPONDER/FCGI_AUTHORIZER/FCGI_FILTER);FCGI_PARAMS流记录类型,用于从Web服务器向应用发送名-值对(FCGI_NameValuePair11/FCGI_NameValuePair14/FCGI_NameValuePair41/FCGI_NameValuePair44;FCGI_STDIN, FCGI_DATA, FCGI_STDOUT, FCGI_STDERR 字节流,FCGI_STDIN是流记录类型,用于从Web服务器向应用发送任意数据。FCGI_DATA是另一种流记录类型,用于向应用发送额外数据。FCGI_STDOUT和FCGI_STDERR都是流记录类型,分别用于从应用向Web服务器发送任意数据和错误数据)。FCGI_ABORT_REQUEST记录来中止请求;处理了请求,或已经拒绝了请求,应用发送FCGI_END_REQUEST记录来终止请求。
2.离散纪录和流式纪录;前者是一个完整的逻辑信息整体;后者需要多个纪录合并,拼接contentData形成一个完整的逻辑整体;