RestBed: API RestBed выдает «Сброс соединения по пиру», когда число одновременных запросов достигает некоторой точки - PullRequest
0 голосов
/ 04 ноября 2019

Мы используем 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;
}

Является ли это ограничением фреймворка? Любая помощь для решения этой проблемы?

Спасибо,

...