рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣рдордиреЗ RESTinio , C ++ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ HTTP рд╕рд░реНрд╡рд░ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЫреЛрдЯрд╛ рдУрдкрдирд╕реЛрд░реНрд╕ C ++ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред Restinio рдЗрд╕ рджреМрд░рд╛рди рдореЗрдЧрд╛-рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рд╣реБрдЖ, рд▓реЗрдХрд┐рди рдпрд╣ рдЦреЛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред рдХреЛрдИ рдЗрд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП "рдореВрд▓" рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЪреБрдирддрд╛ рд╣реИ, рдХрд┐рд╕реА рдиреЗ рдХреБрдЫ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ (рдЬреИрд╕реЗ рд╕реЗрдВрдбрдлрд╛рдЗрд▓ рд╕рдорд░реНрдерди) рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдиреЗ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЕрдиреБрдкрд╛рдд рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╢реБрд░реВ рдореЗрдВ рдХрдИ рд░реЗрд╕реНрдЯрд┐рдирд┐рдпреЛ рдЗрд╕ рд▓реЗрдХреЛрдирд┐рдХ "рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб" рд╡реЗрдВ рд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ:
#include <restinio/all.hpp> int main() { restinio::run( restinio::on_this_thread() .port(8080) .address("localhost") .request_handler([](auto req) { return req->create_response().set_body("Hello, World!").done(); })); return 0; }
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ C ++ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ HTTP рд╕рд░реНрд╡рд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдФрд░ рдпрджреНрдпрдкрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ рдпрд╣ рдХрд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдЖрдорддреМрд░ рдкрд░ рд░реИрд╕реНрдЯрд┐рдирд┐рдпреЛ рдХреЛ рд▓рд┐рдпрд╛ рдерд╛ рд╡рд╣ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдереА, рд╣рдо рдЕрднреА рднреА рдХрднреА-рдХрднреА рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЕрдЧрд░ request_handler рдХреЗ рдЕрдВрджрд░ рдЖрдкрдХреЛ рд▓рдВрдмрд╛ рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рд╣реИред
рдФрд░ рдЪреВрдВрдХрд┐ рдРрд╕рд╛ рдкреНрд░рд╢реНрди рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрддреНрдкрддреНрддрд┐ рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рдВрджрд░реНрдн
рд╣рдордиреЗ рдХрдИ рдмрд╛рд░ рд╕рдорд╛рди рдХрд╛рд░реНрдпреЛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдХрдИ рдмрд╛рд░ рдПрдХ рд╣реА рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдкрдирд╛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп HTTP рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: рдПрдХ рдореМрдЬреВрджрд╛ C ++ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП HTTP рдЗрдирдкреБрдЯ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдпрд╛ рдПрдХ microservice рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж "рднрд╛рд░реА" C ++ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ ny рдХреЛрдбред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рдереА рдХрд┐ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рджрд╕рд┐рдпреЛрдВ рд╕реЗрдХрдВрдб рддрдХ рдлреИрд▓ рд╕рдХрддрд╛ рдерд╛ред
рдореЛрдЯреЗ рддреМрд░ рдкрд░, рдПрдХ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП, HTTP рд╕рд░реНрд╡рд░ рдПрдХ рдирдпрд╛ HTTP рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рд▓ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреА рдУрд░ рдореБрдбрд╝рдирд╛ рдпрд╛ рдХреБрдЫ рд▓рдВрдмреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдпрджрд┐ рдЖрдк HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдордХрд╛рд▓рд┐рдХ рдореЛрдб рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ HTTP рд╕рд░реНрд╡рд░ рдХреЛ рд╣рдЬрд╛рд░реЛрдВ рд╡рд░реНрдХ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдПрдХ рдкреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕реЗ рдЖрдзреБрдирд┐рдХ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рднреА рд╢рд╛рдпрдж рд╣реА рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрдм HTTP рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдзрд╛рдЧреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ I / O рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рдмрд╕ рдХреБрдЫ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╢реАрд▓ рдереНрд░реЗрдб рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдФрд░ HTTP рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЬрдм рдмрд╣реБрдд рдмрд╛рдж рдореЗрдВ, рдХрд╣реАрдВ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдереНрд░реЗрдб рдЬрд╛рдирдХрд╛рд░реА рдЕрдиреБрд░реЛрдз рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрддреА рд╣реИ, рддреЛ рдПрдХ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрд╕ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ HTTP рд╕рд░реНрд╡рд░ рдХреЛ рдЪреБрдирддреА рд╣реИ рдФрд░ рдЙрдЪрд┐рдд рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддреА рд╣реИред
рдЪреВрдБрдХрд┐ рд╣рдореЗрдВ рдХрднреА рднреА рдРрд╕рд╛ рддреИрдпрд╛рд░ рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬреЛ рд╕рд░рд▓ рдФрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛, рдпрд╣ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдерд╛ рдФрд░ "рджреЗрд╢реА" рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рдерд╛, рдЬреЛ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рднреНрдп рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рдерд╛, рдФрд░, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЗ рд▓рд┐рдП рддреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХрд╛рдо, рдлрд┐рд░ 2017 рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣рдордиреЗ рд░реЗрд╕реНрдЯрд┐рдирд┐рдпреЛ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рдХрд┐рдпрд╛ред
рд╣рдо рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдПрдореНрдмреЗрдбреЗрдб HTTP рд╕рд░реНрд╡рд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдерд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреБрдЫ рдирд┐рдпрдорд┐рдд рдЪрд┐рдВрддрд╛рдУрдВ рд╕реЗ рдореБрдХреНрдд рдХрд░рдирд╛, рдЬрдмрдХрд┐ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЙрддреНрдкрд╛рджрдХ, рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЪреАрд▓реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВ ...
рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЖрд╡рдХ рдЕрдиреБрд░реЛрдз рд╣реИ рдЬрд┐рд╕реЗ рдмрд╣реБрдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдХрд░реЗрдВ?
рд╡рд░реНрдХ рдереНрд░реЗрдб Restinio / Asio
рдХрднреА-рдХрднреА Restinio рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдХрд╛рд░реНрдп рдереНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ RESTinio рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬрдм Restinio рдХреЛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдереНрд░реЗрдб ( run(on_this_thread(...))
, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ), рддрдм рдЗрд╕ рдХрд╛рд░реНрдп рдереНрд░реЗрдб рдкрд░ RESTinio рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рдХрд╣рддрд╛ рд╣реИред рдЬрдмрдХрд┐ I / O RESTinio рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧрд╛ рдмрдирд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЕрд▓рдЧ рдереНрд░реЗрдб рдирдП рдХрдиреЗрдХреНрд╢рди рдХреА рд╕реЗрд╡рд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рдЬрдм рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдзрд╛рдЧрд╛ request_handler рдХреЗ рдХрдмреНрдЬреЗ рдореЗрдВ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ RESTINIO рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ I / O рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдФрд░ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдиреЗ run(on_this_thread(...))
рдорд╛рдзреНрдпрдо рд╕реЗ RESTINIO рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЪрд╛рд▓реВ рдереНрд░реЗрдб рдкрд░ run()
I / O) рдФрд░ рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рджреЛрдиреЛрдВ рдХреЗ рдЕрдВрджрд░ run()
рд╣реЛрдВрдЧреЗред
рдореЛрдЯреЗ рддреМрд░ рдкрд░, Restinio рдПрдХ Asio рдЗрд╡реЗрдВрдЯ-рд▓реВрдк рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдпрд╣ рдирдП рдХрдиреЗрдХреНрд╢рди рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ, рдореМрдЬреВрджрд╛ рдХрдиреЗрдХреНрд╢рди рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ, рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░рдирд╛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдЖрджрд┐ред рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЕрдЧрд▓реЗ рдХрдиреЗрдХреНрд╢рди рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ request_handler рдХреЛ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ request_handler рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реА рдереНрд░реЗрдб рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ Asio-action рдИрд╡реЗрдВрдЯ-рд▓реВрдк рдХреЛ рднреА рдЕрд╡рд░реБрджреНрдз рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред
рдпрджрд┐ Restinio рдХреЛ рд╡рд░реНрдХрд┐рдВрдЧ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдкреВрд▓ рдкрд░ (рдЕрд░реНрдерд╛рдд run(on_thread_pool(...))
рдСрдлрд╝ run(on_thread_pool(...))
, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ) рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдмрд╛рдд рд╣реЛрддреА рд╣реИ: рдкреВрд▓ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ Asio- рдИрд╡реЗрдВрдЯ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдХреБрдЫ request_handler рдмрдбрд╝реЗ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреВрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдзрд╛рдЧреЗ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджреЗрдЧрд╛ рдФрд░ I / O рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЕрдм рдЗрд╕ рдереНрд░реЗрдб рдкрд░ рдирд╣реАрдВ рдкрд░реЛрд╕рд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, Restinio рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдХрд╛рд░реНрдп рдПрдХ рдЙрдЪрд┐рдд рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ, рдЕрдкрдиреЗ request_handlers рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реИред
рдХреНрдпрд╛ рдЖрдкрдХреЛ Restinio / Asio рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдкреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдЗрд╕рд▓рд┐рдП, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ request_handler рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдзрд╛рдЧреЗ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЗрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдзрд╛рдЧрд╛ I / O рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ request_handler рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рдЪрд╛рд╣рд┐рдП? рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╡рд╣ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рднрд╛рд░реА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рдордп, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреБрдЫ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЛ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪреВрдВрдХрд┐ рд░реЗрд╕реНрдЯрд┐рдирд┐рдпреЛ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдкреВрд▓ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдмрдбрд╝реЗ рдкреВрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдФрд░ рдпрд╣ рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдХреЗрд╡рд▓ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдиреЗрдХреНрд╢рди рд╣реЛрдВрдЧреЗред рдФрд░ рдХреНрд╡реЗрд░реА рдХреА рддреАрд╡реНрд░рддрд╛ рдХрдо рд╣реИред рдпрджрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╡реЗрд░реА рд╕рдВрдЦреНрдпрд╛ рд╣рдЬрд╛рд░реЛрдВ (рдХрдо рд╕реЗ рдХрдо рдХреЗрд╡рд▓ рдХреБрдЫ рд╕реМ) рддрдХ рдЬрд╛рддреА рд╣реИ, рддреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдкреВрд▓ рдХреЗ рд╕рднреА рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдзрд╛рдЧреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╡реНрдпрд╕реНрдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдВрдЧреЗред рдФрд░ I / O рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдереНрд░реЗрдб рдирд╣реАрдВ рдмрдЪреЗрдЧрд╛ред рдирддреАрдЬрддрди, рд╕рд░реНрд╡рд░ рдЕрдкрдиреА рдЬрд╡рд╛рдмрджреЗрд╣реА рдЦреЛ рджреЗрдЧрд╛ред Restinio рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╕реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рдЬрд╛рдПрдЧреА рдЬрд┐рд╕реЗ Restinio рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЧрд┐рдирддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдирдП рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрдм рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдВрдмрд╛ рдЕрд╡рд░реБрджреНрдз рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ Restinio рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдп рдереНрд░реЗрдб рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рд╕рдорд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдкреВрд▓ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рдмрд╕ рдЕрдЧрд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдХреБрдЫ рдХрддрд╛рд░ рдореЗрдВ рд░рдЦреЗрдЧрд╛, рдЬрд╣рд╛рдВ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рдордиреЗ рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦрд╛, рдЬрдм рд╣рдордиреЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЕрдкрдиреА рдЪрд┐рдВрд░рд╛рдЯ рдбреЗрдореЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА: " рдЪрд┐рдВрд░рд╛рдЯ: рд╕реНрдХреЗрд▓ рдФрд░ рд╢реЗрдпрд░ HTTP рдЗрдореЗрдЬреЗрдЬ рдЗрди рдореЙрдбрд░реНрди C ++, ImageMagic ++, SObjectizer, рдФрд░ Restinio рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ ред"
рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рдо рдХреЗ рдзрд╛рдЧреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рдЙрджрд╛рд╣рд░рдг
рдКрдкрд░, рдореИрдВрдиреЗ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ request_handler рдХреЗ рдЕрдВрджрд░ рд▓рдореНрдмреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИ: рд▓рдореНрдмреА рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░реНрдп рдереНрд░реЗрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рд╣рдореЗрдВ Restinio рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдЧрд▓ рд╡рд░реНрдХрд┐рдВрдЧ рдереНрд░реЗрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдереНрд░реЗрдб рдХреЛ рд▓рдВрдмрд╛ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдФрд░ рд╣рдореЗрдВ RESTinio рдереНрд░реЗрдб рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдп рдереНрд░реЗрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореИрдВ рдЗрди рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдШреБрдЯрдиреЗ рдкрд░ рдзрд╛рдЧрд╛-рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдХрд╛ рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдореВрд▓ рд╕реЛрдмрд┐рдЬрд╛рдЗрдЬрд╝рд░ рдФрд░ рдЗрд╕рдХреЗ рдордЪрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рд╕реАрдПрд╕рдкреА рдЪреИрдирд▓ рд╣реИрдВред рдЖрдк рдпрд╣рд╛рдВ рдорд╛рдЪрд┐рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: " рджрд░реНрдж рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдзрд╛рдЧреЗ рдХреЗ рдмреАрдЪ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди? рд╕реАрдПрд╕рдкреА-рдЪреИрдирд▓ рд╣рдорд╛рд░реА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ред"
рд╕реЗрд╡рд┐рдВрдЧ рдЕрдиреБрд░реЛрдз_рд╣реИрдВрдбрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ
рдмреБрдирд┐рдпрд╛рджреА рддрдХрдиреАрдХ рдЬрд┐рд╕ рдкрд░ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣ рдХрд╣реАрдВ рди рдХрд╣реАрдВ request_handle_t
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╣реИред
рдЬрдм RESTINIO рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрд╡рдХ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП request_handler рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ request_handler рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА request_handle_t
рд╡рд╕реНрддреБ рджреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрд░реЛрдз рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░ рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реЛрдЪрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХрд┐ request_handle_t
рд╣реИ, рддреЛ рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ shared_ptr
рд╣реИред
рдФрд░ рдЪреВрдБрдХрд┐ request_handle_t
shared_ptr
, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗред
рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдп рд╕реВрддреНрд░ рдФрд░ рдЪреИрдирд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪрд▓реЛ рдпрд╣ рд╕рдм рдмрдирд╛рдПрдБ:
int main() {
рд╡рд░реНрдХрд┐рдВрдЧ рдереНрд░реЗрдб рдХрд╛ рд╢рд░реАрд░ рд╕реНрд╡рдпрдВ processing_thread_func()
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрд▓рдЧ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдзрд╛рдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреИрдирд▓ рд╣реИред рдЖрдк RESTINIO рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЗрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрджрд┐ '/' рдХреЗ рд▓рд┐рдП рдПрдХ GET рдЕрдиреБрд░реЛрдз рдЖрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдПрдХрд▓ рдереНрд░реЗрдб рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:
- CSP рдЪреИрдирд▓ рдХреЛ
request_handle_t
рдСрдмреНрдЬреЗрдХреНрдЯ рднреЗрдЬреЗрдВред рдЬрдмрдХрд┐ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ CSP рдЪреИрдирд▓ рдХреЗ рдЕрдВрджрд░ рдпрд╛ рдХрд╣реАрдВ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, Restinio рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдЕрднреА рднреА рдЬреАрд╡рд┐рдд рд╣реИ; - рд╣рдо рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдореВрд▓реНрдп
restinio::request_accepted()
ред рдпрд╣ Restinio рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рддрдереНрдп рдХрд┐ request_handler рдиреЗ рддреБрд░рдВрдд Restinio рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХреА рд╣реИ, рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ restinio::request_accepted()
рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд▓реА рдФрд░ рдХрд┐рд╕реА рджрд┐рди рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрджрд┐ рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рдиреЗ restinio::request_rejected()
рд╡рд╛рдкрд╕ рдХрд░ restinio::request_rejected()
, рддреЛ Restinio рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ 501 рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ: request_handle_t
рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХрд╣реАрдВ рд╕реЗ рднреА рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, std::shared_ptr
ред рдЬрдм рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЬреАрд╡рд┐рдд рд╣реИ, Restinio рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рдиреЗ restinio::request_accepted()
рд▓реМрдЯрд╛рдпрд╛ restinio::request_accepted()
, рддреЛ Restinio рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрднреА рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдИ рд╣реИред
рдЕрдм рд╣рдо рдЗрд╕ рдЕрд▓рдЧ рдереНрд░реЗрдб рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
void processing_thread_func(so_5::mchain_t req_ch) {
рдпрд╣рд╛рдБ рддрд░реНрдХ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рд╣рдо рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ_ рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреБрдЫ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡рд┐рд▓рдВрдмрд┐рдд timeout_elapsed
рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдХреЗрд╡рд▓ timeout_elapsed
рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдЕрдиреБрд░реЛрдз рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВред
Updред рдЬрдм рдХрд╛рдо done()
рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдп рд╕реВрддреНрд░ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Restinio рдХреЛ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рддреИрдпрд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрдЯ рд╣реБрдИ рд╣реИ рдЬрд┐рд╕реЗ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред Restinio рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди I / O рдСрдкрд░реЗрд╢рди рд╕реНрд╡рдпрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдБ done()
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдБ RESTinio I / O рдХрд░рддрд╛ рд╣реИ рдФрд░ request_handlers рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╛рдиреА рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, done()
рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдп рдереНрд░реЗрдб рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд▓реЗрдЦрди рдСрдкрд░реЗрд╢рди рдореБрдЦреНрдп рдереНрд░реЗрдб рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд╣рд╛рдВ restinio::run()
рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╕рдВрджреЗрд╢ рд╕реНрд╡рдпрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
struct handle_request { restinio::request_handle_t m_req; }; struct timeout_elapsed { restinio::request_handle_t m_req; std::chrono::milliseconds m_pause; };
рдпрд╛рдиреА рдПрдХ рдЕрд▓рдЧ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдзрд╛рдЧрд╛ request_handle_t
рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рддрдм рддрдХ рдмрдЪрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЕрд╡рд╕рд░ рдкреВрд░реНрдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЙрдарддрд╛ред рдФрд░ рдЬрдм рдпрд╣ рдЕрд╡рд╕рд░ рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ create_response()
рдХреЛ рд╕рд╣реЗрдЬреЗ рдЧрдП рдЕрдиреБрд░реЛрдз рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ Restinio рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИред рддрдм Restinio рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ, request_handle_t
рдЙрджрд╛рд╣рд░рдг timeout_elapsed
рд╡рд┐рд▓рдВрдмрд┐рдд рд╕рдВрджреЗрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдЖрджрд┐рдо рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИред рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡реЗрджрди рдореЗрдВ, request_handle_t
рдХреЛ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдХрддрд╛рд░ рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдХреЛрдб рдирд┐рдпрдорд┐рдд Restinio рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХреБрдЫ рдЫреЛрдЯреЗ рдХреЛрдб рдиреЛрдЯ
рдпрд╣ рдирд┐рд░реНрдорд╛рдг RESTinio рдЧреБрдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ RESTinio рд╕рд░реНрд╡рд░ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ Restinio рдХреЛ рдЕрдкрдиреЗ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ null_logger_t
рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдиреЗ рдХреЗ logger_t
рд╕реЗрдЯ logger_t
null_logger_t
ред рд▓реЗрдХрд┐рди рдХрдм рд╕реЗ Restinio рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрдИ рдереНрд░реЗрдбреНрд╕ рдкрд░ (RESTinio рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдореБрдЦреНрдп рдереНрд░реЗрдб рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдп рдереНрд░реЗрдб рд╕реЗ рдЖрддреА рд╣реИрдВ), рдлрд┐рд░ рдЖрдкрдХреЛ рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ shared_ostream_logger_t
ред
рдЕрдВрджрд░ processing_thread_func()
thread_func processing_thread_func()
, SObjectizer рдлрд╝рдВрдХреНрд╢рди select()
, рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рдЧреЛ рд╕реЗрд▓реЗрдХреНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рд╣реИ: рдЖрдк рдПрдХ рд╕рд╛рде рдХрдИ рдЪреИрдирд▓реЛрдВ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкрдврд╝ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред select()
рдлрд╝рдВрдХреНрд╢рди рддрдм рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╕рднреА рдЪреИрдирд▓ рдЗрд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд░ рджреЗрддреЗред рдпрд╛ рдЬрдм рддрдХ рдХрд┐ рдЙрд╕реЗ рдЬрдмрд░рди рдпрд╣ рди рдмрддрд╛рдпрд╛ рдЬрд╛рдП рдХрд┐ рдпрд╣ рдЦрддреНрдо рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рдЙрд╕реА рд╕рдордп, рдпрджрд┐ рд░реЗрд╕реНрдЯрд┐рдирд┐рдпреЛ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЪреИрдирд▓ рдмрдВрдж рд╣реИ, рддреЛ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, select()
, рдХрд┐рд╕реА рднреА рдЪреИрдирд▓ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ: рдЬреИрд╕реЗ рд╣реА рдПрдХ рдЪреИрдирд▓ рдмрдВрдж рд╣реЛрддрд╛ рд╣реИ, рд╕реНрдЯреЙрдк рдлреНрд▓реИрдЧ рдХреЛ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣ select()
рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ select()
рдФрд░ processing_thread_func()
рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ_ processing_thread_func()
ред
Response_builder рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реЗрд╡ рдХрд░рдирд╛
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛, рдЬрдм request_handle_t
рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдЕрдиреБрд░реЛрдз рдкрд░ рдкреВрд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗред
рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкрд░рд┐рджреГрд╢реНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдо рдПрдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рддреБрд░рдВрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред рдлрд┐рд░, рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрддреНрддрд░ рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред рдлрд┐рд░, рдХреБрдЫ рдФрд░ рд╕рдордп рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдЧрд▓реЗ рднрд╛рдЧ рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрдиреАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрди рд╕рднреА рднрд╛рдЧреЛрдВ рдХреЗ рдЪрд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╛рдиреА рдкрд╣рд▓реЗ, рдЙрддреНрддрд░ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рддрд╛рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдЗрд╕реЗ рдШрдЯрд╛ рд╕рдХреЗ, рдлрд┐рд░ рджреВрд╕рд░рд╛, рдлрд┐рд░ рддреАрд╕рд░рд╛, рдЖрджрд┐ред
Restinio рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ responce_builders рдХреЗ рдХрд╛рд░рдг рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, user_controlled_output рдФрд░ chunked_output рдЬреИрд╕реЗ рдкреНрд░рдХрд╛рд░ред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, request_handle_t
рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ request_handle_t
рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рддрдХ рд╣реА рдкрд╣рд▓реА рдХреЙрд▓ create_reponse()
ред рдЖрдЧреЗ рд╣рдореЗрдВ response_builder рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЦреИрд░ ...
рдареАрдХ рд╣реИ, рдпрд╣ рдареАрдХ рд╣реИред рд░рд┐рд╕реНрдкрд╛рдВрд╕_рдмрд┐рд▓реНрдбрд░ рдПрдХ рдЬрдВрдЧрдо рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рдпреВрдирд┐рдХ_рдкреНрд░рдЯрд░ рдХреЗ рд╕рдорд╛рди рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рднреА рдЗрд╕реЗ рддрдм рддрдХ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд╣рдо рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЛ рдереЛрдбрд╝рд╛ рдлрд┐рд░ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред processing_thread_func()
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рддреЗ рд╣реИрдВред
рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдирдП processing_thread_func()
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
struct handle_request { restinio::request_handle_t m_req; };
handle_request
рд╕рдВрджреЗрд╢ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди timeout_elapsed
рд╕рдВрджреЗрд╢ рдореЗрдВ timeout_elapsed
рдЕрдм рд╣рдо request_handle_t
рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЬрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрд╕рдХреЗ response_builderред рд╕рд╛рде рд╣реА рд╢реЗрд╖ рднрд╛рдЧреЛрдВ рдХрд╛ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ред рдЬреИрд╕реЗ рд╣реА рдпрд╣ рдХрд╛рдЙрдВрдЯрд░ рд░реАрд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЕрдиреБрд░реЛрдз рд╕реЗрд╡рд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдЕрдм рд╣рдо processing_thread_func()
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
void processing_thread_func(so_5::mchain_t req_ch) { std::random_device rd; std::mt19937 generator{rd()}; std::uniform_int_distribution<> pause_generator{350, 3500}; auto delayed_ch = so_5::create_mchain(req_ch->environment()); bool stop = false; select( so_5::from_all() .on_close([&stop](const auto &) { stop = true; }) .stop_on([&stop]{ return stop; }), case_(req_ch, [&](handle_request cmd) {
рдпрд╛рдиреА , . . .
Upd. flush()
, done()
: RESTinio , I/O- , flush()
, , RESTinio - request_handler-. рдпрд╛рдиреА flush()
, , , restinio::run()
.
, RESTinio :
[2019-05-13 15:02:35.106] TRACE: starting server on 127.0.0.1:8080 [2019-05-13 15:02:35.106] INFO: init accept #0 [2019-05-13 15:02:35.106] INFO: server started on 127.0.0.1:8080 [2019-05-13 15:02:39.050] TRACE: accept connection from 127.0.0.1:49280 on socket #0 [2019-05-13 15:02:39.050] TRACE: [connection:1] start connection with 127.0.0.1:49280 [2019-05-13 15:02:39.050] TRACE: [connection:1] start waiting for request [2019-05-13 15:02:39.050] TRACE: [connection:1] continue reading request [2019-05-13 15:02:39.050] TRACE: [connection:1] received 78 bytes [2019-05-13 15:02:39.050] TRACE: [connection:1] request received (#0): GET / [2019-05-13 15:02:39.050] TRACE: [connection:1] append response (#0), flags: { not_final_parts, connection_keepalive }, write group size: 1 [2019-05-13 15:02:39.050] TRACE: [connection:1] start next write group for response (#0), size: 1 [2019-05-13 15:02:39.050] TRACE: [connection:1] start response (#0): HTTP/1.1 200 OK [2019-05-13 15:02:39.050] TRACE: [connection:1] sending resp data, buf count: 1, total size: 167 [2019-05-13 15:02:39.050] TRACE: [connection:1] outgoing data was sent: 167 bytes [2019-05-13 15:02:39.050] TRACE: [connection:1] finishing current write group [2019-05-13 15:02:39.050] TRACE: [connection:1] should keep alive [2019-05-13 15:02:40.190] TRACE: [connection:1] append response (#0), flags: { not_final_parts, connection_keepalive }, write group size: 3 [2019-05-13 15:02:40.190] TRACE: [connection:1] start next write group for response (#0), size: 3 [2019-05-13 15:02:40.190] TRACE: [connection:1] sending resp data, buf count: 3, total size: 42 [2019-05-13 15:02:40.190] TRACE: [connection:1] outgoing data was sent: 42 bytes [2019-05-13 15:02:40.190] TRACE: [connection:1] finishing current write group [2019-05-13 15:02:40.190] TRACE: [connection:1] should keep alive [2019-05-13 15:02:43.542] TRACE: [connection:1] append response (#0), flags: { not_final_parts, connection_keepalive }, write group size: 3 [2019-05-13 15:02:43.542] TRACE: [connection:1] start next write group for response (#0), size: 3 [2019-05-13 15:02:43.542] TRACE: [connection:1] sending resp data, buf count: 3, total size: 42 [2019-05-13 15:02:43.542] TRACE: [connection:1] outgoing data was sent: 42 bytes [2019-05-13 15:02:43.542] TRACE: [connection:1] finishing current write group [2019-05-13 15:02:43.542] TRACE: [connection:1] should keep alive [2019-05-13 15:02:46.297] TRACE: [connection:1] append response (#0), flags: { not_final_parts, connection_keepalive }, write group size: 3 [2019-05-13 15:02:46.297] TRACE: [connection:1] start next write group for response (#0), size: 3 [2019-05-13 15:02:46.297] TRACE: [connection:1] sending resp data, buf count: 3, total size: 42 [2019-05-13 15:02:46.297] TRACE: [connection:1] append response (#0), flags: { final_parts, connection_keepalive }, write group size: 1 [2019-05-13 15:02:46.297] TRACE: [connection:1] outgoing data was sent: 42 bytes [2019-05-13 15:02:46.298] TRACE: [connection:1] finishing current write group [2019-05-13 15:02:46.298] TRACE: [connection:1] should keep alive [2019-05-13 15:02:46.298] TRACE: [connection:1] start next write group for response (#0), size: 1 [2019-05-13 15:02:46.298] TRACE: [connection:1] sending resp data, buf count: 1, total size: 5 [2019-05-13 15:02:46.298] TRACE: [connection:1] outgoing data was sent: 5 bytes [2019-05-13 15:02:46.298] TRACE: [connection:1] finishing current write group [2019-05-13 15:02:46.298] TRACE: [connection:1] should keep alive [2019-05-13 15:02:46.298] TRACE: [connection:1] start waiting for request [2019-05-13 15:02:46.298] TRACE: [connection:1] continue reading request [2019-05-13 15:02:46.298] TRACE: [connection:1] EOF and no request, close connection [2019-05-13 15:02:46.298] TRACE: [connection:1] close [2019-05-13 15:02:46.298] TRACE: [connection:1] close: close socket [2019-05-13 15:02:46.298] TRACE: [connection:1] close: timer canceled [2019-05-13 15:02:46.298] TRACE: [connection:1] close: reset responses data [2019-05-13 15:02:46.298] TRACE: [connection:1] destructor called
, RESTinio 167 . , , RESTinio .
, RESTinio - response_builder , .
. , , . response_builder . , responce_builder , ..
.
, ?
, request_handler- - . , , ?
RESTinio , - request_handler-. - , , RESTinio . , . , :
[2019-05-13 15:32:23.618] TRACE: starting server on 127.0.0.1:8080 [2019-05-13 15:32:23.618] INFO: init accept #0 [2019-05-13 15:32:23.618] INFO: server started on 127.0.0.1:8080 [2019-05-13 15:32:26.768] TRACE: accept connection from 127.0.0.1:49502 on socket #0 [2019-05-13 15:32:26.768] TRACE: [connection:1] start connection with 127.0.0.1:49502 [2019-05-13 15:32:26.768] TRACE: [connection:1] start waiting for request [2019-05-13 15:32:26.768] TRACE: [connection:1] continue reading request [2019-05-13 15:32:26.768] TRACE: [connection:1] received 78 bytes [2019-05-13 15:32:26.768] TRACE: [connection:1] request received (#0): GET / [2019-05-13 15:32:30.768] TRACE: [connection:1] handle request timed out [2019-05-13 15:32:30.768] TRACE: [connection:1] close [2019-05-13 15:32:30.768] TRACE: [connection:1] close: close socket [2019-05-13 15:32:30.768] TRACE: [connection:1] close: timer canceled [2019-05-13 15:32:30.768] TRACE: [connection:1] close: reset responses data [2019-05-13 15:32:31.768] WARN: [connection:1] try to write response, while socket is closed [2019-05-13 15:32:31.768] TRACE: [connection:1] destructor called
- . , , RESTinio , .. .
- handle_request_timeout
, RESTinio- ( ).
рдирд┐рд╖реНрдХрд░реНрд╖
, , RESTinio тАФ , . , RESTinio, , RESTinio, .
RESTinio , , , : ? - ? - ? - - ?
рдкреБрдирд╢реНрдЪред RESTinio , SObjectizer, . , - RESTinio , : " C++ HTTP- ", " HTTP- C++: RESTinio, libcurl. 1 ", " Shrimp: HTTP C++ ImageMagic++, SObjectizer RESTinio "