
рдХрд┐рд╕реА рднреА рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЬреАрд╡рди рдореЗрдВ, рдПрдХ рд╕рдордп рдЖрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдПрдкреАрдЖрдИ рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдЖрджрд┐ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдЖ рд╣реИ рдХрд┐ рдЕрдм рдпрд╣ рд░реАрд╕реНрдЯ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдЧрдд рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдХреА рдмрдЪрдд рдХрд╛ рдкреАрдЫрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рд╕реЗ рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рджреЛрдиреЛрдВ рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЖрдВрддреНрд░ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдЖрдк
POCO рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдм API рдХреЛ рдореМрдЬреВрджрд╛ C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдлрд╛рд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдп
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░рд╛ рдРрд╕рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ:
#include <iostream> #include <conio.h> int main(int argc, char** argv) { for(;;) { std::cout << "Hello world!" << std::endl; _getch(); } return 0; }
рд╣рдо рдмрд╛рд╣рд░ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдкрд╛рда рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдлреЙрд░реНрдо рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
http: // host: port / setText? text = NewText
POCO рдХрд╛ рд╕рдВрдЧреНрд░рд╣
- рд╣рдо рдпрд╣рд╛рдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдмреЗрд╕рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ (рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп 1.4.6p1)ред
- рдХрд╣реАрдВ рдЦреЛрд▓ рджреЛред
- рд╣рдо рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЗрд╕реЗ рдЕрдирдЬрд┐рдк рдХрд┐рдпрд╛ рдерд╛ рдФрд░ build_vs90.cmd , build_vs100.cmd , build_vs110.cmd рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдмреИрдЪ рдлрд╛рдЗрд▓реЗрдВ рджреЗрдЦреАрдВ ред рд╡реЗ Visual Studio рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ POCO рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдмрд╕ рдЬрд┐рд╕реЗ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдЪрд▓рд╛рдПрдВ (рд╕реНрдЯреВрдбрд┐рдпреЛ, рдЦреБрдж рд╕реЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ VS2008, VS2010 рдФрд░ VS2012 рдХреЗ рд▓рд┐рдП POCO рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ - рдХрднреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реБрдИред
рд╣рдо POCO рдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
- рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ POCO рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ
- рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рддреАрди рд╕рдмрдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдмрдирд╛рдПрдВ: рд╢рд╛рдорд┐рд▓, рд▓рд┐рдм, рдмрд┐рдиред
- рд╕рднреА POCO рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ (% POCO% \ XML \ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ,% POCO% \ Util \ _,% POCO% \ Net \ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдФрд░% POCO% \ Foundation \ рд╢рд╛рдорд┐рд▓ рдлрд╝реЛрд▓реНрдбрд░)
- Lib рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ,% POCO% \ lib рд╕реЗ lib рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдбреАрдмрдЧ рдФрд░ рд░рд┐рд▓реАрдЬрд╝ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ рд╕реЙрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- % POCO% \ bin рд╕реЗ dll рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрд┐рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рд╡реЗ рдЗрд╕реА рддрд░рд╣ рдбрд┐рдмрдЧ рдФрд░ рд░рд┐рд▓реАрдЬрд╝ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
- рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдкрде рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП lib рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдкрдеред $ (рд╕реЙрд▓реНрдпреВрд╢рдирдбрд┐рд░) рдЪрд░ рдФрд░ рд╕рд╛рдкреЗрдХреНрд╖ рд░рд╛рд╕реНрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
- рдбреАрдмрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП PocoFoundationd.lib, PocoNetd.lib, PocoUtild.lib рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ "d" рдЕрдХреНрд╖рд░ рдХреЗ рдмрд┐рдирд╛ рдЙрдирдХреЗ рд╕рдВрд╕реНрдХрд░рдг - рд░рд┐рд▓реАрдЬрд╝ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдПред
- рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдмрд┐рди рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдбреАрдПрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЖрдк рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдбреАрдмрдЧ \ рд░рд┐рд▓реАрдЬрд╝ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдХрджрдо рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡рд┐рд╖рдп рдХреЗ рдЕрдВрдд рдореЗрдВ GitHub рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рд╣реИ - рдЖрдк рдЗрд╕реЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡реЗрдм API рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП POCO рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдХреЛрдб рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рд╣реИред рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, ServerApplication рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред рдпрд╣ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдореБрдЦреНрдп рдереНрд░реЗрдб рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде HTTPServer рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЕрдиреНрдп рдереНрд░реЗрдб рдореЗрдВ рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ред рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рд╣рдо рдЕрдкрдирд╛ рдХрд╛рд░рдЦрд╛рдирд╛ рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ HTTPRequestHandhFactory рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдирдпрд╛ рд╣реИрдВрдбрд▓рд░ рдСрдмреНрдЬреЗрдХреНрдЯ (HTTPRequestHandler рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдПрдХ рд╡рд░реНрдЧ) рдмрдирд╛рдПрдЧрд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз, рдЙрд╕рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкрд░рд┐рдгрд╛рдо рдХреА рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдирд┐рдкрдЯреЗрдЧрд╛ред
рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рд╡рд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЛрдб рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИред
PocoHelloWorld.cpp #include "MyRequestHandler.h" int main(int argc, char** argv) { MyServerApp app; return app.run(argc, argv); }
MyRequestHandler.h #pragma once #include <Poco/Mutex.h> #include <Poco/Util/ServerApplication.h> using namespace Poco; using namespace Poco::Util; using namespace std; class MyServerApp : public ServerApplication { public: static string getText(); static void setText(string newText); protected: int main(const vector<string> &); static string text; static Mutex textLock; };
MyRequestHandler.cpp #include <iostream> #include <conio.h> #include <string> #include "MyRequestHandler.h" #include <Poco/Net/HTTPServerRequest.h> #include <Poco/Net/HTTPRequestHandler.h> #include <Poco/Net/HTTPServerResponse.h> #include <Poco/Net/HTTPServer.h> #include <Poco/Net/HTTPRequestHandlerFactory.h> #include <Poco/ScopedLock.h> #include <Poco/URI.h> #include <Poco/StringTokenizer.h> using namespace Poco::Net; string MyServerApp::text = "Hello world!"; Mutex MyServerApp::textLock; class CMyRequestHandler : public HTTPRequestHandler { public: void handleRequest(HTTPServerRequest &req, HTTPServerResponse &resp) { resp.setStatus(HTTPResponse::HTTP_OK); resp.setContentType("text/html"); ostream& out = resp.send(); URI uri(req.getURI()); if (uri.toString().find("/setText") == 0) { StringTokenizer str(uri.getQuery(), "="); if (str.count() == 2 && str[0] == "text") { MyServerApp::setText(str[1]); out << "ok"; out.flush(); return; } } out << "error"; out.flush(); } }; class MyRequestHandlerFactory : public HTTPRequestHandlerFactory { public: virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest &) { return new CMyRequestHandler; } }; void MyServerApp::setText(string newText) { ScopedLock<Mutex> lock(textLock); text = newText; } string MyServerApp::getText() { ScopedLock<Mutex> lock(textLock); return text; } int MyServerApp::main(const vector<string> &) { HTTPServer s(new MyRequestHandlerFactory, ServerSocket(8000), new HTTPServerParams); s.start(); for(;;) { cout << MyServerApp::getText() << endl; _getch(); } s.stop(); return Application::EXIT_OK; }
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА
рдЖрдк рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж, рдкреЛрдХреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реБрднрдХрд╛рдордирд╛рдПрдБред