Мы используем RestBed для обработки наших микро сервисов C ++.
Отправка параллельных запросов на сервер. Когда количество одновременных запросов достигает некоторой точки, начните видеть следующую ошибку с сервера:
curl: (56) Ошибка Recv: сброс соединения по пиру
Нашфрагмент кода выглядит следующим образом.
void serviceHandler(const shared_ptr< Session > session)
{
const auto request = session->get_request();
int content_length = request->get_header( "Content-Length", 0 );
session->fetch( content_length, [&]( const shared_ptr< Session > session, const Bytes &body ) {
// dont do the fork here, since this is a function inside the service
serviceProcessor(session, body.data(), body.size(), RequestType::TYPE_JSON);
} );
return;
}
void matchReadyHandler( Service & )
{
......
}
void failed_filter_validation_handler(const shared_ptr< Session > session)
{
session->close( 400 );
}
int main(int argc, char **argv)
{
try {
......
// set the signal handler to reap the children
signal(SIGCHLD, SIG_IGN);
auto resource = make_shared< Resource >();
// we support multiple end points
resource->set_paths( genericService->getEndPoint() );
// we support only JSON
resource->set_failed_filter_validation_handler( failed_filter_validation_handler );
resource->set_method_handler( "POST", { { "Content-Type", "application/json" } }, &serviceHandler );
auto settings = make_shared< Settings >();
settings->set_port(genericService->getPort());
settings->set_worker_limit(1000);
settings->set_default_header( "Connection", "close" );
// Lets set the service to be ready
auto service = make_shared< Service >();
service->publish( resource );
// keep the handler ready to do pre-jobs
service->set_ready_handler( appReadyHandler );
// do the signal handling here
service->set_signal_handler(SIGINT|SIGTERM, [service](const int signum) {
try {
if ( service->is_up() ) {
service->stop();
}
} catch(exception &e) {
......
}
} );
// now start the service
service->start( settings );
}
catch(exception &e) {
......
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Является ли это ограничением фреймворка? Любая помощь для решения этой проблемы?
Спасибо,