В настоящее время я пытаюсь узнать больше о серверной библиотеке libevent .
Я натолкнулся на этот пример программы, запускаемой после загрузки библиотеки libevent , которую я запустилс main as:
main.cpp
#include <winsock2.h>
#include <windows.h>
#include<stdio.h>
#include <csignal>
#include <condition_variable>
#include "HttpServer.h"
#pragma comment(lib,"WS2_32")
std::mutex m;
std::condition_variable cv;
void signalHandler(int signum)
{
cv.notify_all();
}
void onHello(CHttpRequest *req, void *arg)
{
char *data = "<html><body><center><h1>Hello World </h1></center></body></html>";
req->AddBufferOut(data, strlen(data));
req->SendReply(HTTP_OK);
}
int main(int argc, char** argv)
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
WSAStartup(wVersionRequested, &wsaData);
signal(SIGINT, signalHandler);
signal(SIGTERM, signalHandler);
CHttpServer server("127.0.0.1", 5555, 5); //Create five threads
server.SetCallback("/hello", onHello, NULL);
server.Start();
std::unique_lock<std::mutex> lk(m);
cv.wait(lk);
return 0;
}
5 потоков создаются в этом, передавая CHttpServer server("127.0.0.1", 5555, 5);
.Я добавил Sleep в void CHttpRequest::AddBufferOut(const char* data, size_t len)
из 5 секунд, как показано ниже:
evbuffer_add(evhttp_request_get_output_buffer(this->req), data, len);
std::this_thread::sleep_for(std::chrono::milliseconds(5000)); // In place of "evthread_use_pthreads" replaced with "evthread_use_windows_threads"
текст консоли
Thread-id created in Lambda Expression -----> 1696
Thread-id created in Lambda Expression -----> 3008
Thread-id created in Lambda Expression -----> 4464
Thread-id created in Lambda Expression -----> 5516
Thread-id created in Lambda Expression -----> 1652
Sending Reply by Thread-id------> 3008
Sending Reply by Thread-id------> 5516
Sending Reply by Thread-id------> 1696
Sending Reply by Thread-id------> 4464
Sending Reply by Thread-id------> 1652
Sending Reply by Thread-id------> 3008
Sending Reply by Thread-id------> 3008
Sending Reply by Thread-id------> 3008
Sending Reply by Thread-id------> 3008
Sending Reply by Thread-id------> 3008
Первые пять запросов выполняются параллельно, но после этого все запросы назначаютсяк той же теме.Этот случай возникает, когда сон длится более 1 секунды, а не когда он менее одной секунды.Любая помощь будет оценена.Я использую Windows 7 VS 2015. Я передаю 10 запросов, используя JMeter, все запросы достигают сразу.Он печатает только «Hello world» в сети «http://127.0.0.1:5555/hello", поэтому время, затрачиваемое на это, невелико. Вы можете поделиться своим опытом с подобной ошибкой, даже если она встречалась в разных программах и мерах, которые вы предприняли.