Corvusoft / restbed

Corvusoft's Restbed framework brings asynchronous RESTful functionality to C++14 applications.
http://www.corvusoft.co.uk
Other
1.93k stars 379 forks source link

The size of the body may cause problems #527

Open gaowanlu opened 2 years ago

gaowanlu commented 2 years ago

code block

            void POST(const std::shared_ptr<restbed::Session> session)
            {
                const auto request = session->get_request();
                long long int content_length = stoll(request->get_header("Content-Length", "0"));
                std::pair<bool, std::string> res;
                session->fetch(content_length, [](const std::shared_ptr<restbed::Session> session, const restbed::Bytes &body) -> void
                               {
                                if(body.size()>485918){//maxsize
                                    return;
                                }
                                std::cout << body.size() << std::endl;
                                // string m_body(body.begin(), body.end());
                                // std::cout << m_body.size() << std::endl;
                                // colnago::dao::Post postObj;
                                //    postObj.parse(string(body.begin(), body.end()));
                                //    colnago::server::server.postDao->INSERT(postObj);
                                   std::cout << "INSERT END" << std::endl; });
                // BaseResponse<> response(res.first, res.second);
                session->close(restbed::OK, "", {{"Content-Type", "application/json"}});
                std::cout << "POST END" << std::endl;
            }

When the size of the body is large, the lambda expression cannot be triggered, what are the possible reasons for this phenomenon?

gaowanlu commented 2 years ago
POST END
779
INSERT END
POST END
947
INSERT END
POST END
1082
INSERT END
POST END
1220
INSERT END
POST END
1220
INSERT END
POST END
1334
INSERT END
POST END
1448
INSERT END
POST END
POST END
gaowanlu commented 2 years ago

It's ok,now, I review HTTP_SERVICE sample.to call session->close in lambda.

            void POST(const std::shared_ptr<restbed::Session> session)
            {
                const auto request = session->get_request();
                long long int content_length = stoll(request->get_header("Content-Length", "0"));
                auto handler = [](const std::shared_ptr<restbed::Session> session, const restbed::Bytes &body) -> void
                {
                    string m_body(body.begin(), body.end());
                    colnago::dao::Post postObj;
                    postObj.parse(string(body.begin(), body.end()));
                    std::pair<bool, std::string> res = colnago::server::server.postDao->INSERT(postObj);
                    BaseResponse<> response(res.first, res.second);
                    session->close(restbed::OK, response.stringify(), {{"Content-Type", "application/json"}});
                };
                session->fetch(content_length, handler);
            }