몽구스 웹 서버 라이브러리를 사용하여 멀티 스레드 서버 응용 프로그램을 만들려고합니다. 주 스레드가 연결을 처리하고 자신의 스레드에서 작동하는 프로세서로 요청을 보냅니다. 그런 다음 프로세서는 결과를 큐에 배치하고 큐 관찰자는 결과를 클라이언트에 다시 보내야합니다. 여기몽구스 서버로 두 번째 스레드에서 데이터 보내기
내가 프로세서에 대한 데이터를 준비하고 대기열에 배치 :
소스는 그 방법을 찾고 있습니다.
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에서 manualy를 실행 한 다음 계산 된 결과를 다시 event_handler에 전달하면 mg_printf_data를 사용하여 (MG_TRUE를 반환하면서) 클라이언트에 보낼 수 있습니다. 다른 방법으로 - 나는 아니에요.
제대로 작동하려면이 소스에서 정확히 무엇을 변경해야합니까?