FastCGI c++存储请求
FastCGI c++ store requests?
我需要使用fastcgi和c++进行任何应用。一个不同于FCGX_Accept_r(…)循环的线程是进行处理的线程,所以我希望我可以在请求进入队列时存储它们,并让第二个线程在每个请求的输出流上发送响应。这就是我到目前为止得到的。
void Listen(){
FCGX_Request request;
FCGX_InitRequest(&request, 0, 0);
while(FCGX_Accept_r(&request)>= 0)
{
AddRequest(request); //just adds it to a std::queue<FCGX_Request> queue
request = *NewRequest();
}
}
FCGX_Request* NewRequest()
{
FCGX_Request* request;
request = new FCGX_Request();
FCGX_InitRequest(request, 0, 0);
return request;
}
第二个线程只是检查队列中是否有内容(它们都共享)。如果有请求,它将执行任何操作,并且应该打印响应并调用FCGX_Finish_r(&request)。当我打印输出时,应用程序不会崩溃,但nginx在错误文件中放入了错误"上游读取响应头时过早关闭FastCGI stdout"。我真的不确定发生了什么。也许这与FCGX_Request中的输出流是一个指针有关。
如果我取消注释行
request = *NewRequest();
它可以打印响应,但如果我每次都不能将请求重新初始化为新的请求,那么我就不能将它们存储在队列中。
如何将这些FCGX_Requests问题存储在队列中,以供另一个线程处理?感谢
这样做:
void Listen(){
FCGX_Request *request = NewRequest();
while(FCGX_Accept_r(request)>= 0)
{
// Make your queue hold pointers
AddRequest(request); //just adds it to a std::queue<FCGX_Request*> queue
request = NewRequest();
}
}
FCGX_Request* NewRequest()
{
FCGX_Request* request = new FCGX_Request();
FCGX_InitRequest(request, 0, 0);
return request;
}
处理完这些请求后,不要忘记删除它们。
相关文章:
- 将字符串存储在c++中的稳定内存中
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- 如何在boost beast http请求中设置http头
- 使用QProcess执行命令,并将结果存储在QStringList中
- 发送一个带有libcurl C++问题的帖子请求:s
- 访问存储在向量C++中的结构的多态成员
- 如何从存储在std::映射中的std::集中删除元素
- 存储模板类型以强制转换回派生<T>
- 类型总是使用其大小存储在内存中吗
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 使用无符号字符数组有效存储内存
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 在多个核心中处理一个HTTP请求
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 带结构的二维矢量:如何存储元素
- 添加存储在向量中的大整数的函数出现问题
- FastCGI c++存储请求
- 存储多个类型并根据请求返回单个类型