我正在尝试使用 mongoose Web 服务器库创建一个多线程服务器应用程序。我有主线程服务连接并向在自己的线程中工作的处理器发送请求。然后处理器将结果放入队列,队列观察者必须将结果发送回客户端。
消息来源是这样看的:
在这里,我为处理器准备数据并将其放入队列中。
typedef std::pair<struct mg_connection*, const char*> TransferData;
int server_app::event_handler(struct mg_connection *conn, enum mg_event ev)
{
Request req;
if (ev == MG_AUTH)
return MG_TRUE; // Authorize all requests
else if (ev == MG_REQUEST)
{
req = parse_request(conn);
task_queue->push(TransferData(conn,req.second));
mg_printf(conn, "%s", ""); // (1)
return MG_MORE; // (2)
}
else
return MG_FALSE; // Rest of the events are not processed
}
在这里,我试图将结果发回。这个函数在它自己的线程中工作。
void server_app::check_results()
{
while(true)
{
TransferData res;
if(!res_queue->pop(res))
{
boost::this_thread::sleep_for(boost::chrono::milliseconds(100));
continue;
}
mg_printf_data(res.first, "%s", res.second); // (3)
}
}
问题是客户端没有从服务器接收任何东西。
如果我在将任务放入队列后在 event_handler 中手动运行 check_result 函数,然后将计算结果传递回 event_handler,我可以使用 mg_printf_data(返回 MG_TRUE)将其发送给客户端。任何其他方式 - 我不是。
我究竟应该在这个来源中进行哪些更改才能使其正常工作?