рдЪрд┐рдВрд░рд╛рдЯ: рд╕реНрдХреЗрд▓ рдФрд░ рд╢реЗрдпрд░ HTTP рдЗрдореЗрдЬреЗрдЬ рдЗрди рдореЙрдбрд░реНрди C ++ рд╡рд┐рде рдЗрдореЗрдЬрдореИрдЬрд┐рдХ ++, рд╕реЛрдмрд┐рдЬрд╛рдЗрдЬрд╝рд░, рдПрдВрдб рд░реЗрд╕реНрдЯрд┐рдирд┐рдпреЛ



рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рд╣рдорд╛рд░реА рдЫреЛрдЯреА рдЯреАрдо C ++ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рджреЛ OpenSource рдЙрдкрдХрд░рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реА рд╣реИ - SObjectizer рдЕрднрд┐рдиреЗрддрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ Restinio рдПрдореНрдмреЗрдбреЗрдб HTTP рд╕рд░реНрд╡рд░ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЧреИрд░-рддреБрдЪреНрдЫ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ:

  • рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рд╕реБрд╡рд┐рдзрд╛рдПрдБ, рдФрд░ "рдУрд╡рд░рдмреЛрд░реНрдб" рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП?
  • рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╣реА" рддрд░реАрдХреЗ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ?

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрдм рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рджреМрд░рд╛рди рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдЬрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреА рд╢рд┐рдХрд╛рдпрддреЛрдВ рдпрд╛ рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЗрдЪреНрдЫрд╛рдУрдВ рдХреА рд╕рдВрддреБрд╖реНрдЯрд┐ рдХреЗ рдХрд╛рд░рдг, рд╣рдо рдЕрдкрдиреЗ рдЯреВрд▓ рдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рднрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдЬреАрд╡рди рд╕реЗ рд╣реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рди рдХрд┐ "рдЙрдВрдЧрд▓реА рд╕реЗ рдЪреВрд╕рд╛"ред

рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рд╕реЗ рджреВрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рд╕рд╛рдордирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдФрд░ рд╣рдо рд╣рдореЗрд╢рд╛ рдЕрдкрдиреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдЗрд╕рд▓рд┐рдП, рдХрднреА-рдХрднреА рд╣рдо рдЕрдкрдиреЗ рд▓рд┐рдП рдЫреЛрдЯреА-рдЫреЛрдЯреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рддреЗ рд╣реБрдП рд╣рдо рдЯреВрд▓ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдФрдЬрд╛рд░реЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдВрдЦреЛрдВ рд╕реЗ рджреЗрдЦрдиреЗ рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдЧрд╛рдпрдм рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред

рдЖрдЬ рд╣рдо рдРрд╕реЗ рд╣реА рдПрдХ "рдЫреЛрдЯреЗ" рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ SObjectizer рдФрд░ Restinio рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рде рдЖрдП рдереЗред

рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдФрд░ рд╡рд┐рддрд░рдгред рдЖрдЦрд┐рд░ рдРрд╕рд╛ рдХреНрдпреЛрдВ?


рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдбреЗрдореЛ рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдордиреЗ рдПрдХ HTTP рд╕рд░реНрд╡рд░ рдЪреБрдирд╛ рдЬреЛ рдЕрдиреБрд░реЛрдз рдкрд░ рд╕реНрдХреЗрд▓ рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, HTTP рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ:

curl "http://localhost:8080/my_picture.jpg?op=resize&max=1920" 

рдФрд░ рдмрджрд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдПрдХ рддрд╕реНрд╡реАрд░ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рд▓рдВрдмреА рддрд░рдл 1920 рдкрд┐рдХреНрд╕рд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреА рд╣реИред

рдЪреБрдирд╛рд╡ рдЗрд╕ рдХрд╛рд░реНрдп рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдПрдХ рд╕рдордп рдореЗрдВ Restinio рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдерд╛: C рдпрд╛ C ++ рдореЗрдВ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдФрд░ рдбреАрдмрдЧреНрдб рдХреЛрдб рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ HTTP рдЗрдирдкреБрдЯ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрд╕реА рд╕рдордп, рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЕрдиреБрд░реЛрдз рдХреЗ рдЖрд╡реЗрджрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реАрдзреЗ рдЖрдИрдУ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрд╡реЗрджрди рдХреЛрдб рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рднрд╣реАрди рд╣реИред HTTP рд╕рд░реНрд╡рд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: HTTP рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ, рдЖрдЧреЗ рдХреЗ рдЖрд╡реЗрджрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдз рдХреЛ рдХрд╣реАрдВ рдФрд░ рджреЗрдВ, рдЕрдЧрд▓реЗ HTTP рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рд░реНрд╡рд┐рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рдЬрдм рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ HTTP рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВред

рдпрд╣ рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдз рд╣реЛрддрд╛ рд╣реИред рдПрдХ HTTP рд╕рд░реНрд╡рд░ рдПрдХ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рдПрдХ рдЕрдВрд╢ рдореЗрдВ рдЕрдкрдирд╛ рд╕реАрдзрд╛ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ (рдпрд╛рдиреА рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛, рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдкрд╛рд░реНрд╕ рдХрд░рдирд╛)ред рд▓реЗрдХрд┐рди рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдирд╛ рджрд╕рд┐рдпреЛрдВ, рд╕реИрдХрдбрд╝реЛрдВ, рдпрд╛ рд╣рдЬрд╛рд░реЛрдВ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рднреА рд▓реЗ рд╕рдХрддрд╛ рд╣реИред

рдФрд░ рдЪреВрдБрдХрд┐ рдПрдХ рдЪрд┐рддреНрд░ рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЪрд┐рддреНрд░ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рддреЗ рд╕рдордп HTTP рд╕рд░реНрд╡рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ HTTP рд╕рд░реНрд╡рд░ рдХреЗ рдХрд╛рдо рдХреЛ рдлреИрд▓рд╛рдиреЗ рдФрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рдо рдХреЗ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рдо рдХреЗ рдзрд╛рдЧреЗ рд╣реЛрдВрдЧреЗред рдЦреИрд░, рдЪреВрдВрдХрд┐ рд╣рдо рдорд▓реНрдЯреА-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдзрд╛рдЧреЗ рд╣реЛрдВрдЧреЗред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░реЗрдВрдЧреЗ, рдХреБрдЫ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд▓рд┐рдЦрд┐рдд, рдХрд╛рдо рдХрд░ рд░рд╣реЗ C / C ++ рдХреЛрдб (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ ImageMagic ++) рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реЛрд╕реЗрдВ, рдФрд░ рдХрдИ рд╕реВрдЪрдирд╛рдУрдВ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░реЗрдВред Restinio рдФрд░ SObjectizer рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рд░реНрдп, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред

рдФрд░ рд╣рдордиреЗ рдЕрдкрдиреЗ рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЭреАрдВрдЧрд╛ рдХрд╛ рдирд╛рдо рддрдп рдХрд┐рдпрд╛ред

рдЭреАрдВрдЧрд╛ рдЬреИрд╕рд╛ рднреА рд╣реИ


рдЭреАрдВрдЧрд╛ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?


рдЪрд┐рдВрд░рд╛рдЯ рдПрдХ рд╕рд╛рдВрддреНрд╡рдирд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ рдкрд░ рдЦреБрд▓рддрд╛ рд╣реИ рдФрд░ рд╕реБрдирддрд╛ рд╣реИ, рдлреЙрд░реНрдо рдХреЗ HTTP GET рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ:

 /<image>.<ext> /<image>.<ext>?op=resize&<side>=<value> 

рдЬрд╣рд╛рдВ:

  • рдЫрд╡рд┐ рдЫрд╡рд┐ рдлрд╝рд╛рдЗрд▓ рдкреИрдорд╛рдиреЗ рдкрд░ рдХрд░рдиреЗ рдХрд╛ рдирд╛рдо рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, my_picture рдпрд╛ DSCF0069;
  • ext рдЭреАрдВрдЧрд╛ (jpg, jpeg, png рдпрд╛ gif) рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ;
  • рд╕рд╛рдЗрдб рдЙрд╕ рддрд░рдл рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдпрд╛ рддреЛ рдЪреМрдбрд╝рд╛рдИ рдХрд╛ рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рддрд╕реНрд╡реАрд░ рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЪреМрдбрд╝рд╛рдИ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ, рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рддрд╕реНрд╡реАрд░ рдХреА рдКрдВрдЪрд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪреБрдиреА рдЬрд╛рддреА рд╣реИред рдпрд╛ рдКрдВрдЪрд╛рдИ рдХрд╛ рдореВрд▓реНрдп, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдКрдВрдЪрд╛рдИ рдореЗрдВ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╣реЛрддреА рд╣реИред рдпрд╛ рддреЛ рдЕрдзрд┐рдХрддрдо, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рдВрдмрд╛ рдкрдХреНрд╖ рд╕реАрдорд┐рдд рд╣реИ, рдФрд░ рдЭреАрдВрдЧрд╛ рдЦреБрдж рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓рдВрдмреА рддрд░рдл рдКрдВрдЪрд╛рдИ рдпрд╛ рдЪреМрдбрд╝рд╛рдИ рд╣реИ;
  • рдорд╛рди рд╡рд╣ рдЖрдХрд╛рд░ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╣реЛрддреА рд╣реИред

рдпрджрд┐ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо URL рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рдмрд┐рдирд╛ рдЖрдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЗ, рддреЛ рдЭреАрдВрдЧрд╛ рдмрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдореВрд▓ рдЫрд╡рд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХрд╛ рдСрдкрд░реЗрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рддреЛ рдЭреАрдВрдЧрд╛ рдЕрдиреБрд░реЛрдзрд┐рдд рдЫрд╡рд┐ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреЗрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рджреЗрддрд╛ рд╣реИред

рдЗрд╕реА рд╕рдордп, рдЪрд┐рдВрд░рд╛рдЯ рдХреЛ рд╕реНрдХреЗрд▓ рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдХреИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред рдпрджрд┐ рдПрдХ рдЪрд┐рддреНрд░ рдХреЛ рд╕рдорд╛рди рдЖрдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рд░-рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреИрд╢ рдореЗрдВ рд╣реИ, рддреЛ рдХреИрд╢ рд╕реЗ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХреИрд╢ рдореЗрдВ рдХреЛрдИ рдЪрд┐рддреНрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪрд┐рддреНрд░ рдбрд┐рд╕реНрдХ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдХреЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред

рдХреИрд╢ рд╕рдордп-рд╕рдордп рдкрд░ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд┐рддреНрд░ рдЬреЛ рдХреИрд╢ рдореЗрдВ рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрддрд┐рдо рдПрдХреНрд╕реЗрд╕ рдЙрдиреНрд╣реЗрдВ рдЗрд╕рд╕реЗ рдмрд╛рд╣рд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдХреИрд╢реЗ рдЕрдкрдиреЗ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдПрдХ рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдпрд╣ 100Mb рд╣реИ) рддреЛ рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреА рддрд╕реНрд╡реАрд░реЗрдВ рдХреИрд╢ рд╕реЗ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджреА рдЬрд╛рддреА рд╣реИрдВред

рд╣рдордиреЗ рдПрдХ рдкреГрд╖реНрда рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЬрд╛рдХрд░ рдХреЛрдИ рднреА рдЭреАрдВрдЧрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:



рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рдЖрдк рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ "рдЖрдХрд╛рд░ рдмрджрд▓реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╣реА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЭреАрдВрдЧрд╛ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рджреЛ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдкрд╣рд▓рд╛ рдЕрдиреБрд░реЛрдз рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдЧрд╛ (рдпрд╛рдиреА рдЕрднреА рддрдХ рдХреИрд╢ рдореЗрдВ рдРрд╕реЗ рдЖрдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╢ рдирд╣реАрдВ рд╣реЛрдЧрд╛), рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓рд╛ рдЕрдиреБрд░реЛрдз рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЫрд╡рд┐ рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдФрд░ рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХреИрд╢ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдХреЗрд▓ рдХреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдвреВрдВрдв рд▓реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рддреБрд░рдВрдд рджреЗ рджреЗрдЧрд╛ред

рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЪрд┐рддреНрд░ рдХреИрд╢ рд╕реЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд┐рддреНрд░ рдХреЗ рддрд╣рдд рдкрд╛рда рджреНрд╡рд╛рд░рд╛ рдмрдврд╝рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рда "рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореНрдб (114.0ms)" рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЪрд┐рддреНрд░ рдХреЛ рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЬрд╝реВрдо рдСрдкрд░реЗрд╢рди рдореЗрдВ 114 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд▓рдЧреЗред

рдЭреАрдВрдЧрд╛ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ?


рдЭреАрдВрдЧрд╛ рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рд╡рд░реНрдХ рдереНрд░реЗрдбреНрд╕ рдХреЗ рддреАрди рд╕рдореВрд╣ рдЪрд▓рд╛рддрд╛ рд╣реИ:

  1. HTTP рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдбреНрд╕ рдХрд╛ рдкреВрд▓ред рдЗрд╕ рдкреВрд▓ рдореЗрдВ, рдирдП рдХрдиреЗрдХреНрд╢рди рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдФрд░ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИрдВред HTTP рд╕рд░реНрд╡рд░ RESTINIO рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  2. рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдп рд╕реВрддреНрд░, рдЬрд┐рд╕ рдкрд░ transform_manager SObjectizer рдПрдЬреЗрдВрдЯ рдЪрд▓рддрд╛ рд╣реИред рдпрд╣ рдПрдЬреЗрдВрдЯ HTTP рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреЗрд▓ рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдХреИрд╢ рд░рдЦрддрд╛ рд╣реИред
  3. рдереНрд░реЗрдб рдкреВрд▓ рдЬрд┐рд╕ рдкрд░ SObjectizer рдПрдЬреЗрдВрдЯ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ред рд╡реЗ ImageMagic ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд┐рддреНрд░реЛрдВ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ:



HTTP рд╕рд░реНрд╡рд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рдЖрдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдСрдкрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ HTTP рд╕рд░реНрд╡рд░ рд╕реНрд╡рдпрдВ рд╕реЗрдВрдбрдлрд╛рдЗрд▓ рдСрдкрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдХреЛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдз рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ transform_manager рдПрдЬреЗрдВрдЯ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЯреНрд░рд╛рдВрд╕реНрдлрд╝реЙрд░реНрдо_рдореЗрдВрдЬрд░ рдПрдЬреЗрдВрдЯ HTTP рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдХреИрд╢ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдХреЗрд▓ рдХрд┐рдП рдЧрдП рдЪрд┐рддреНрд░реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреИрд╢ рдореЗрдВ рдХреЛрдИ рдЪрд┐рддреНрд░ рд╣реИ, рддреЛ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо_рдордирдЧрд░ рддреБрд░рдВрдд HTTP рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЪрд┐рддреНрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо_рдордирдЧрд░ рддрд╕реНрд╡реАрд░ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдПрдЬреЗрдВрдЯреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИред рдЬрдм рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рд╕реЗ рдЖрддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ HTTP рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрддрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред

рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдПрдЬреЗрдВрдЯ рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо_рдордирдЧрд░ рдХреЗ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо_рдордирдЧрд░ рдПрдЬреЗрдВрдЯ рдХреЛ рджреЗрддрд╛ рд╣реИред

рдЭреАрдВрдЧрд╛ рдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ?


рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЭреАрдВрдЧрд╛ рдХреЗ рд╕рдмрд╕реЗ рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдЗрд╕ рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдмрд┐рдЯрдмрдХреЗрдЯ рдкрд░ рдпрд╛ рдЧреАрдерд╣рдм рдкрд░ рдЭреАрдВрдЧрд╛-рдбреЗрдореЛ ред

рдХреЛрдб рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдЪрд┐рдВрд░рд╛рдЯ рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдХреЛрдб рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

C ++ 17 рдФрд░ рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХреЗ рд╕рдВрдХрд▓рдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЭреАрдВрдЧрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╣рдордиреЗ рд╕реА ++ 17 рдФрд░ рд╕рдВрдХрд▓рдХ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬреАрд╕реАрд╕реА 7.3 рдФрд░ 8.1ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рднрд╛рд░реА рд╢реЛрдз рд╣реИред рдЗрд╕рд▓рд┐рдП, рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ C ++ 17 рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдФрд░ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред рдЬрдмрдХрд┐ рдЕрдзрд┐рдХ рд╕рд╛рдВрд╕рд╛рд░рд┐рдХ рд╡рд┐рдХрд╛рд╕ рдпрд╣рд╛рдВ рдФрд░ рдЕрдм рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдФрджреНрдпреЛрдЧрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИрдВ, рд╣рдо рдкреБрд░рд╛рдиреЗ рд╕рдВрдХрд▓рдХ рдкрд░ рд╡рд╛рдкрд╕ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реИрдВ рдФрд░ рд╢рд╛рдпрдж C ++ 14 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ C ++ 11 рдХрд╛ рд╕рдмрд╕реЗрдЯ рднреАред

рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ C ++ 17 рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЭреАрдВрдЧрд╛ рдХреЛрдб рдореЗрдВ рд╕рддреНрд░рд╣рд╡реЗрдВ рдорд╛рдирдХ рд╕реЗ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рд╛ рд╣реИ: рд╡рд┐рд╢реЗрд╖рддрд╛ [[nodiscard]], std :: рд╡реИрдХрд▓реНрдкрд┐рдХ / std :: variant / std "рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо" рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ ", рдФрд░ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдирд╣реАрдВ, рд╕рдВрд░рдЪрд┐рдд рдмрд╛рдЗрдВрдбрд┐рдВрдЧ, рдЕрдЧрд░ рдХреЙрдиреНрд╕реНрдЯреИрдХреНрд╕, рдПрд╕рдЯреАрдбреА рдХреЗ рд▓рд┐рдП рд▓рдВрдмреЛрджрд░ рдХреЗ рд▓рд┐рдП рдЖрдЧрдВрддреБрдХ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ :: рдпрд╛рддреНрд░рд╛ ... рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдпреЗ рд╕рднреА рддреНрд░рд┐рднреБрдЬ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рде рд╡реЗ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рдВрдЪрдпреА рдкреНрд░рднрд╛рд╡ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВред

рддреЛ рдЭреАрдВрдЧрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдЬреЛ рдкрд╣рд▓рд╛ рдЙрдкрдпреЛрдЧреА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛: рд╕реА ++ 17 рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдпрдХ рд╣реИред

Restinio рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ HTTP рд╕рд░реНрд╡рд░


рд╢рд╛рдпрдж рдЪрд┐рдВрд░рд╛рдЯ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣рд┐рд╕реНрд╕рд╛ HTTP рд╕рд░реНрд╡рд░ рдФрд░ HTTP GET рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ ( http_server.hpp рдФрд░ http_server.cpp ) рд╣реИред

рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рднреЗрдЬреЗрдВ


рдореВрд▓ рд░реВрдк рд╕реЗ, рдЪрд┐рдВрд░рд╛рдЯ HTTP рд╕рд░реНрд╡рд░ рдХреЗ рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА рддрд░реНрдХ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИрдВ:

 void add_transform_op_handler( const app_params_t & app_params, http_req_router_t & router, so_5::mbox_t req_handler_mbox ) { router.http_get( R"(/:path(.*)\.:ext(.{3,4}))", restinio::path2regex::options_t{}.strict( true ), [req_handler_mbox, &app_params]( auto req, auto params ) { if( has_illegal_path_components( req->header().path() ) ) { return do_400_response( std::move( req ) ); } const auto opt_image_format = image_format_from_extension( params[ "ext" ] ); if( !opt_image_format ) { return do_400_response( std::move( req ) ); } if( req->header().query().empty() ) { return serve_as_regular_file( app_params.m_storage.m_root_dir, std::move( req ), *opt_image_format ); } const auto qp = restinio::parse_query( req->header().query() ); if( "resize" != restinio::value_or( qp, "op"sv, ""sv ) ) { return do_400_response( std::move( req ) ); } handle_resize_op_request( req_handler_mbox, *opt_image_format, qp, std::move( req ) ); return restinio::request_accepted(); } ); } 

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди Restinio ExpressJS рд░рд╛рдЙрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTTP GET рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЬрдм HTTP рд╕рд░реНрд╡рд░ рдХреЛ GET рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ URL рджрд┐рдП рдЧрдП рд░реЗрдЧреБрд▓рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ, рддреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓реИрдореНрдмрдбрд╛ рдлрдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд▓рдВрдмрд╛ рдлрд╝рдВрдХреНрд╢рди рдЕрдиреБрд░реЛрдз рдХреА рд╢реБрджреНрдзрддрд╛ рдкрд░ рдХреБрдЫ рд╕рд░рд▓ рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдореЗрдВ, рдЗрд╕рдХрд╛ рдХрд╛рдо рдПрдХ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ: рдпрджрд┐ рдЖрдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдзрд┐рдд рддрд╕реНрд╡реАрд░ рдПрдХ рдкреНрд░рднрд╛рд╡реА рд╕рд┐рд╕реНрдЯрдо Sendfile рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред рдпрджрд┐ рдЖрдХрд╛рд░ рдмрджрд▓реЗрдВ рдореЛрдб рд╕реЗрдЯ рд╣реИ, рддреЛ рдПрдХ рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо_рдордирдЧрд░ рдПрдЬреЗрдВрдЯ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 void handle_resize_op_request( const so_5::mbox_t & req_handler_mbox, image_format_t image_format, const restinio::query_string_params_t & qp, restinio::request_handle_t req ) { try_to_handle_request( [&]{ auto op_params = transform::resize_params_t::make( restinio::opt_value< std::uint32_t >( qp, "width" ), restinio::opt_value< std::uint32_t >( qp, "height" ), restinio::opt_value< std::uint32_t >( qp, "max" ) ); transform::resize_params_constraints_t{}.check( op_params ); std::string image_path{ req->header().path() }; so_5::send< so_5::mutable_msg<a_transform_manager_t::resize_request_t>>( req_handler_mbox, std::move(req), std::move(image_path), image_format, op_params ); }, req ); } 

рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ HTTP рд╕рд░реНрд╡рд░, рд░рд┐рд╕рд╛рдЗрдЬрд╝-рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрд╕реЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рдВрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ transform_manager рдПрдЬреЗрдВрдЯ рдХреЛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред

Sendfile рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛


рдпрджрд┐ HTTP рд╕рд░реНрд╡рд░ рдореВрд▓ рдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛, рд╕рд░реНрд╡рд░ рддреБрд░рдВрдд Sendfile рдСрдкрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рдЪрд┐рддреНрд░ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЬреБрдбрд╝рд╛ рдореБрдЦреНрдп рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ (рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреВрд░реНрдг рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ):

 [[nodiscard]] restinio::request_handling_status_t serve_as_regular_file( const std::string & root_dir, restinio::request_handle_t req, image_format_t image_format ) { const auto full_path = make_full_path( root_dir, req->header().path() ); try { auto sf = restinio::sendfile( full_path ); ... return set_common_header_fields_for_image_resp( file_stat.st_mtim.tv_sec, resp ) .append_header( restinio::http_field::content_type, image_content_type_from_img_format( image_format ) ) .append_header( http_header::shrimp_image_src, image_src_to_str( http_header::image_src_t::sendfile ) ) .set_body( std::move( sf ) ) .done(); } catch(...) {} return do_404_response( std::move( req ) ); } 

рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдмрд┐рдВрджреБ restinio :: sendfile () рдХрд╣ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдорд╛рди рдХреЛ set_body () рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред

Restinio :: sendfile () рдлрд╝рдВрдХреНрд╢рди рд╕рд┐рд╕реНрдЯрдо API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдСрдкрд░реЗрд╢рди рдмрдирд╛рддрд╛ рд╣реИред рдЬрдм рдпрд╣ рдСрдкрд░реЗрд╢рди set_body () рдореЗрдВ рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Restinio рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ restinio :: sendfile () рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддрдм рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЯреАрд╕реАрдкреА рд╕реЙрдХреЗрдЯ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред

рдЫрд╡рд┐ рдХреИрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛


рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо_рдордирдЧрд░ рдПрдЬреЗрдВрдЯ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдХреИрд╢ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╢ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрд╡-рдирд┐рд░реНрдорд┐рдд рдХрдВрдЯреЗрдирд░ рд╣реИ рдЬреЛ рджреЛ рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

  1. рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдПрдХ рддрддреНрд╡ рдХреА рдЦреЛрдЬ рдХрд░рдХреЗ (рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдРрд╕рд╛ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ std :: map рдФрд░ std :: unordered_map)ред
  2. рд╕рдмрд╕реЗ рдкреБрд░рд╛рдирд╛ рдХреИрд╢ рдЖрдЗрдЯрдо рдПрдХреНрд╕реЗрд╕ рдХрд░рдХреЗред

рдкрд╣рд▓реА рдкрд╣реБрдВрдЪ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╣рдореЗрдВ рдХреИрд╢ рдореЗрдВ рдЫрд╡рд┐ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рджреВрд╕рд░рд╛ рд╣реИ рдЬрдм рд╣рдо рдХреИрд╢ рд╕реЗ рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреА рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВред

рд╣рдордиреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХреБрдЫ рдЦреЛрдЬрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╢рд╛рдпрдж Boost.MultiIndex рдпрд╣рд╛рдБ рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдорд▓реНрдЯреАрдЖрдВрдбреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдмреВрд╕реНрдЯ рдХреЛ рдЦреАрдВрдЪрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЕрдкрдиреЗ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдЪрдореБрдЪ рдЕрдкрдиреЗ рдШреБрдЯрдиреЛрдВ рдкрд░ рдХрд┐рдпрд╛ред рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ;)

рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо_рдордирдЧрд░ рдореЗрдВ рд▓рдВрдмрд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдХрддрд╛рд░


рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рд░рд▓рддрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЭреАрдВрдЧрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреНрдп рдЖрдХрд╛рд░, (рд▓рдЧрднрдЧ 250 рд▓рд╛рдЗрдиреЛрдВ рдХреА рдПрдХ hpp рдлрд╝рд╛рдЗрд▓ рдФрд░ рд▓рдЧрднрдЧ 270 рд░реЗрдЦрд╛рдУрдВ рдХреА рдПрдХ cpp рдлрд╝рд╛рдЗрд▓ ) рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╣рдорд╛рд░реА рд░рд╛рдп рдореЗрдВ рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ред

рдПрдЬреЗрдВрдЯ рдХреЛрдб рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпреЛрдЧрджрд╛рди рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо_рдордирдЧрд░ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐ рди рдХреЗрд╡рд▓ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдХреИрд╢, рдмрд▓реНрдХрд┐ рд▓рдВрдмрд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдХрддрд╛рд░ рднреАред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдПрдЬреЗрдВрдЯреЛрдВ рдХреА рдПрдХ рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рд╣реИ (рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рд▓рдЧрднрдЧ рдЙрдкрд▓рдмреНрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП)ред рдпрджрд┐ рдирд┐: рд╢реБрд▓реНрдХ рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдз рдПрдХ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдпрд╛ рддреЛ рдЕрдиреБрд░реЛрдз рдкрд░ рддреБрд░рдВрдд рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЕрдиреБрд░реЛрдз рдХреЛ рдкрдВрдХреНрддрд┐рдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░ рдХрддрд╛рд░ рд╕реЗ рд▓реЗ рд▓реЛ рдЬрдм рдПрдХ рдореБрдлреНрдд рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

рдЭреАрдВрдЧрд╛ рдореЗрдВ, рд╣рдо рдкреНрд░рддреАрдХреНрд╖рд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдПрдХ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 struct pending_request_t { transform::resize_request_key_t m_key; sobj_shptr_t<resize_request_t> m_cmd; std::chrono::steady_clock::time_point m_stored_at; pending_request_t( transform::resize_request_key_t key, sobj_shptr_t<resize_request_t> cmd, std::chrono::steady_clock::time_point stored_at ) : m_key{ std::move(key) } , m_cmd{ std::move(cmd) } , m_stored_at{ stored_at } {} }; using pending_request_queue_t = std::queue<pending_request_t>; pending_request_queue_t m_pending_requests; static constexpr std::size_t max_pending_requests{ 64u }; 

рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рд╣рдордиреЗ рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд╕рдордп рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдХрддрд╛рд░ рдореЗрдВ рд░рдЦрд╛ред рдлрд┐рд░ рд╣рдо рд╕рдордп-рд╕рдордп рдкрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреА рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИред рджрд░рдЕрд╕рд▓, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ "рднрд╛рд░реА" рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдПрдХ рдмрдВрдбрд▓ рдкрд╣рд▓реЗ рдЖ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрд╛ред рдПрдХ рдореБрдлреНрдд рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдХреЗ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд╣реАрди рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЧрд▓рдд рд╣реИ, рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ рдЕрдм рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реИред

рд▓рдВрдмрд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдХрд╛рд░ рд╕реАрдорд╛ рднреА рд╣реИред рдпрджрд┐ рдХрддрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ рддрдХ рдкрд╣реБрдВрдЪ рдЧрдИ рд╣реИ, рддреЛ рд╣рдо рддреБрд░рдВрдд рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реИрдВред

рд▓рдВрдмрд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдХрддрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рд▓реЗрдЦ рдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред

рдЯрд╛рдЗрдк рдХрд░реЗрдВ sobj_shptr_t рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рд╕рдВрджреЗрд╢ рдЙрджрд╛рд╣рд░рдг


рдкреНрд░рддреАрдХреНрд╖рд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдХрддрд╛рд░, рд╕рд╛рде рд╣реА рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо_рдордирдЧрд░ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ, рдЖрдк sobj_shptr_t рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ transform_manager рдХреЛ resize_request_t рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ HTTP рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:

 struct resize_request_t final : public so_5::message_t { restinio::request_handle_t m_http_req; std::string m_image; image_format_t m_image_format; transform::resize_params_t m_params; resize_request_t( restinio::request_handle_t http_req, std::string image, image_format_t image_format, transform::resize_params_t params ) : m_http_req{ std::move(http_req) } , m_image{ std::move(image) } , m_image_format{ image_format } , m_params{ params } {} }; 

рдФрд░ рд╣рдореЗрдВ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдХрддрд╛рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк resize_request_t рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рд╕реЗ рдорд╛рдиреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдФрд░ рдЖрдк рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ SObjectizer рдореЗрдВ рд╕рдВрджреЗрд╢ рд╕реНрд╡рдпрдВ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рд╣реИред рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрджрд░ рдПрдХ рд▓рд┐рдВрдХ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╕рд╛рдеред рдФрд░ рдпрд╣ рдХрд┐ SObjectizer рдореЗрдВ рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░ рд╣реИ - intrusive_ptr_tред

рдпрд╛рдиреА рд╣рдо рдкреНрд░рддреАрдХреНрд╖рд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП resize_request_t рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдХрддрд╛рд░ рдореЗрдВ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рд╕реВрдЪрдХ рдХреЛ resize_request_t рдХреЗ рдореМрдЬреВрджрд╛ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдХреНрд░рдо рдореЗрдВ рд╕рднреА рдЬрдЧрд╣ рдирд╣реАрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рджреЗрд╢реА рдирд╛рдо so_5 :: intrusive_ptr_t, рд╣рдо рдЕрдкрдиреЗ рдЙрдкрдирд╛рдо рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ:

 template<typename T> using sobj_shptr_t = so_5::intrusive_ptr_t<T>; 

рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ


рд╣рдордиреЗ рдХрд╣рд╛ рдХрд┐ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рд╣рдордиреЗ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдХреИрд╕реЗ HTTP рд╕рд░реНрд╡рд░ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде transform_manager рдПрдЬреЗрдВрдЯ рдХреЛ рдПрдХ рдЬрд╛рдВрдЪ рднреЗрдЬрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рднреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, transform_manager рдХреЛрдб рдореЗрдВ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 void a_transform_manager_t::on_failed_resize( failed_resize_t & /*result*/, sobj_shptr_t<resize_request_t> cmd ) { do_404_response( std::move(cmd->m_http_req) ); } 

рдпрд╣ рдХреЛрдб рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЫрд╡рд┐ рдХреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╕реНрдХреЗрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ do_404_response рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 auto do_404_response( restinio::request_handle_t req ) { auto resp = req->create_response( 404, "Not Found" ); resp.append_header( restinio::http_field_t::server, "Shrimp draft server" ); resp.append_header_date_field(); if( req->header().should_keep_alive() ) resp.connection_keep_alive(); else resp.connection_close(); return resp.done(); } 

Do_404_response () рдХреЗ рд╕рд╛рде рдкрд╣рд▓рд╛ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо_рдордирдЧрд░ рдПрдЬреЗрдВрдЯ рдХреЗ рдХрд╛рд░реНрдп рдкреНрд░рд╕рдВрдЧ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ HTTP рд╕рд░реНрд╡рд░ рдХреЗ рдХрд╛рд░реНрдп рдкреНрд░рд╕рдВрдЧ рдкрд░ред

рджреВрд╕рд░рд╛ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╕рдореНрдорд╛рди рд╡рд╕реНрддреБ рдкрд░ рдХреА рдЧрдИ () рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╣реИред рдПрдХ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕рднреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬрд╛рджреВ рдпрд╣рд╛рдВ рд╣реЛрддрд╛ рд╣реИред рдХрд┐рдП рдЧрдП () рд╡рд┐рдзрд┐ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдЗрд╕реЗ HTTP рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред рдпрд╛рдиреА do_404_response () рд╕реЗ рд╡рд╛рдкрд╕реА рддрдм рд╣реЛрдЧреА рдЬрдм рд╕рдВрдмрдВрдзрд┐рдд рд╡рд╕реНрддреБ рдХреА рд╕рд╛рдордЧреНрд░реА HTTP рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдкрдВрдХреНрддрд┐рдмрджреНрдз рд╣реЛ рдЬрд╛рдПрдЧреАред

HTTP рд╕рд░реНрд╡рд░ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдирдИ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ рдФрд░ рдЙрдЪрд┐рдд рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред

рдЯрд╛рдЗрдк рдХрд░реЗрдВ dataizable_blob_t


рдПрдХ рдФрд░ рдЫреЛрдЯрд╛ рдмрд┐рдВрджреБ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╢рд╛рдпрдж Restinio рдХреА рдкреЗрдЪреАрджрдЧрд┐рдпреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рдмрд┐рдирд╛ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рд╣рдо рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдПрдХ рдЕрдЬреАрдм рдкреНрд░рдХрд╛рд░ рдХреЗ datasizeable_blob_t рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

 struct datasizable_blob_t : public std::enable_shared_from_this< datasizable_blob_t > { const void * data() const noexcept { return m_blob.data(); } std::size_t size() const noexcept { return m_blob.length(); } Magick::Blob m_blob; //! Value for `Last-Modified` http header field. const std::time_t m_last_modified_at{ std::time( nullptr ) }; }; 

рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдЖрдкрдХреЛ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдмрджрд▓реА рд╣реБрдИ рддрд╕реНрд╡реАрд░ рдХреЗ рд╕рд╛рде HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрдирддреА рд╣реИ

 void serve_transformed_image( restinio::request_handle_t req, datasizable_blob_shared_ptr_t blob, image_format_t img_format, http_header::image_src_t image_src, header_fields_list_t header_fields ) { auto resp = req->create_response(); set_common_header_fields_for_image_resp( blob->m_last_modified_at, resp ) .append_header( restinio::http_field::content_type, image_content_type_from_img_format( img_format ) ) .append_header( http_header::shrimp_image_src, image_src_to_str( image_src ) ) .set_body( std::move( blob ) ); for( auto & hf : header_fields ) { resp.append_header( std::move( hf.m_name ), std::move( hf.m_value ) ); } resp.done(); } 

рд╣рдо set_body () рдкрд░ рдХреЙрд▓ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ: рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдпреЛрдЧреНрдп_blob_t рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░ рд╕реАрдзреЗ рд╡рд╣рд╛рдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпреЛрдВ?

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ Restinio рдПрдХ HTTP рдкреНрд░рддрд┐рд╕рд╛рдж рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ ред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ std :: string to set_body () рдФрд░ RESTinio рдЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдорд╛рди рд╕рдВрдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рд╕рд╣реЗрдЬреЗрдЧрд╛ред

рд▓реЗрдХрд┐рди рдРрд╕реЗ рд╕рдордп рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм set_body () рдХреЗ рд▓рд┐рдП рдорд╛рди рдХрд╛ рдПрдХ рд╕рд╛рде рдХрдИ рдЙрддреНрддрд░реЛрдВ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЭреАрдВрдЧрд╛ рдореЗрдВ рдРрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЭреАрдВрдЧрд╛ рдХреЛ рдПрдХ рд╣реА рдЫрд╡рд┐ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рдорд╛рди рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред . RESTinio set_body() :
 template<typename T> auto set_body(std::shared_ptr<T> body); 

T : data() size(), , RESTinio .

shrimp- Magick::Blob. Magic::Blob data, size(), length(). - datasizable_blob_t, RESTinio Magick::Blob.

transform_manager


transform_manager :

  • , ;
  • transformer-.

transform_manager . .

, :

 struct clear_cache_t final : public so_5::signal_t {}; struct check_pending_requests_t final : public so_5::signal_t {}; 

, :

 void a_transform_manager_t::so_define_agent() { so_subscribe_self() .event( &a_transform_manager_t::on_resize_request ) .event( &a_transform_manager_t::on_resize_result ) .event( &a_transform_manager_t::on_clear_cache ) .event( &a_transform_manager_t::on_check_pending_requests ); } void a_transform_manager_t::on_clear_cache( mhood_t<clear_cache_t> ) {...} void a_transform_manager_t::on_check_pending_requests( mhood_t<check_pending_requests_t> ) {...} 

SObjectizer .

:

 void a_transform_manager_t::so_evt_start() { m_clear_cache_timer = so_5::send_periodic<clear_cache_t>( *this, clear_cache_period, clear_cache_period ); m_check_pending_timer = so_5::send_periodic<check_pending_requests_t>( *this, check_pending_period, check_pending_period ); } 

тАФ timer_id, send_periodic(). , timer_id. , send_periodic() , . a_transform_manager_t :

 so_5::timer_id_t m_clear_cache_timer; so_5::timer_id_t m_check_pending_timer; 


shrimp-. , , RESTinio SObjectizer - - , HelloWorld. .

, transform_manager . , . , . . , , .

transform_manager. , тАФ .

shrimp- ┬л ┬╗, . , . , , shrimp .

shrimp- . stay tuned.

- shrimp-, RESTinio SObjectizer-, . , shrimp тАФ , - shrimp- - , resize, , .

рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ...

Source: https://habr.com/ru/post/hi416387/


All Articles