C ++ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг
"рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг" рдХреНрдпрд╛ рд╣реИ

рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ рдХрд┐, рдЬрдм рдореИрдВ рдЖрдИрдЯреА рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рддрдм рддрдХ рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐рд╕реА рдХреЛ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ "рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдПрдбрд┐рд╢рди" рдХрд╣рддреЗ рдирд╣реАрдВ рд╕реБрдирд╛ред рд▓реЗрдХрд┐рди рдЖрдЦрд┐рд░рдХрд╛рд░, рд▓реЛрдЧ рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╕рдорд╛рди рд╣реИрдВред рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ c ++ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрдо рд╕реЗ рдХрдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддреЗ рд╣реБрдП, рдЙрджреНрдпрдорд╢реАрд▓рддрд╛ рдХреА рдЦрд╛рдИ рдХреЛ рднрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ C ++ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, "рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг" рднрд╛рд╖рд╛ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рддрд░рд┐рдд рдФрд░ / рдпрд╛ рдХреНрд▓рд╕реНрдЯрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рдореЙрдбреНрдпреВрд▓рд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП [рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо] рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ "рдЬрд▓реНрджреА рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирд┐рдпрдо, рдЙрдЪреНрдЪ рднрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдорд╛рд░реА рдмрд╛рддрдЪреАрдд рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрд╡реЗрджрди , рдореЙрдбреНрдпреВрд▓ рдФрд░ рдкреНрд▓рдЧ-рдЗрди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
- рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИ, рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ, рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рдкреНрд▓рдЧ-рдЗрди рд╕рдВрд░рдЪрдирд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
- рдПрдХ рдореЙрдбреНрдпреВрд▓ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рдЕрдВрджрд░ рд░рд╣рддрд╛ рд╣реИред
- рдПрдХ рдкреНрд▓рдЧрдЗрди рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рднрд░реА рд╣реБрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдпрд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдЕрдкрдиреЗ рдЕрджреНрд╡рд┐рддреАрдп рдХрд╛рд░реНрдп рдХреЛ рдХрд░рддреЗ рд╣реБрдП, рдЖрдорддреМрд░ рдкрд░ рд╕рд┐рд╕реНрдЯрдо-рд╡рд╛рдЗрдб рдореИрдХреЗрдирд┐рдЬреНрдо рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ (DBMS), рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд╕ (JMS) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реВрдЪрдирд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди, рд╡рд┐рддрд░рд┐рдд рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ рд╕реНрдерд╛рдиреАрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрд┐ (рд▓реЗрди-рджреЗрди) рдХрд╛ рд╕рдВрд░рдХреНрд╖рдг, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдз рдЖрдиреЗ рд╡рд╛рд▓реЗ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, http (s) (fastcgi) рдпрд╛ рд╡реЗрдмрд╕реЛрдХреЗрдЯреНрд╕ рдЖрджрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ... рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ (OSGI) рдХреЛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╡рд┐рддрд░рд┐рдд рдХрдордЬреЛрд░ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг

рдЖрд╡реЗрджрди
рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдХреАрдорд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЖрд╡реЗрджрди рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗ рджреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдм рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП C ++ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХреНрдпрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ Qt рдФрд░ GTK рдЬреИрд╕реЗ рдЧреНрд░рд╛рдлрд┐рдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рдереЗ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдиреЗ рд╢реБрд░реВ рдореЗрдВ рд╣реА рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдерд╛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХ "рд╡рд┐рдВрдбреЛ" рдерд╛, рдЬрд┐рд╕рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЬрд╝рди рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред qtservice ред рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╢рд░реНрдд рдЧреНрд░рд╛рдлрд╝рд┐рдХ рдврд╛рдБрдЪрд╛ рдирд╣реАрдВ рдЦреАрдВрдЪрдирд╛ рдЪрд╛рд╣рддрд╛, рддреЛ рдЪрд▓рд┐рдП рдЧрд╝реИрд░-рдЧреНрд░рд╛рдлрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдУрд░ рджреЗрдЦрддреЗ рд╣реИрдВред рдФрд░ рдмрдврд╝рд╛рд╡рд╛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреЛрдИ Boost.Application рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдкрд╕рдВрдж рд╣реИред рдПрдХ рдЕрд▓рдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ Boost.Application ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХреНрд░рд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ Boost.Application рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ
#define BOOST_ALL_DYN_LINK #define BOOST_LIB_DIAGNOSTIC #define BOOST_APPLICATION_FEATURE_NS_SELECT_BOOST #include <fstream> #include <iostream> #include <boost/application.hpp> using namespace boost; // my application code class myapp { public: myapp(application::context& context) : context_(context) {} void worker() { // ... while (st->state() != application::status::stopped) { boost::this_thread::sleep(boost::posix_time::seconds(1)); if (st->state() == application::status::paused) my_log_file_ << count++ << ", paused..." << std::endl; else my_log_file_ << count++ << ", running..." << std::endl; } } // param int operator()() { // launch a work thread boost::thread thread(&myapp::worker, this); context_.find<application::wait_for_termination_request>()->wait(); return 0; } bool stop() { my_log_file_ << "Stoping my application..." << std::endl; my_log_file_.close(); return true; // return true to stop, false to ignore } private: std::ofstream my_log_file_; application::context& context_; }; int main(int argc, char* argv[]) { application::context app_context; // auto_handler will automatically add termination, pause and resume (windows) // handlers application::auto_handler<myapp> app(app_context); // to handle args app_context.insert<application::args>( boost::make_shared<application::args>(argc, argv)); // my server instantiation boost::system::error_code ec; int result = application::launch<application::server>(app, app_context, ec); if (ec) { std::cout << "[E] " << ec.message() << " <" << ec.value() << "> " << std::endl; } return result; }
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдЕрдкрдиреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдзрд╛рдЧреЗ рдФрд░ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде myapp
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдореИрдВ pocoproject рдврд╛рдВрдЪреЗ рд╕реЗ рдПрдХ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛
#include <iostream> #include <sstream> #include "Poco/AutoPtr.h" #include "Poco/Util/AbstractConfiguration.h" #include "Poco/Util/Application.h" #include "Poco/Util/HelpFormatter.h" #include "Poco/Util/Option.h" #include "Poco/Util/OptionSet.h" using Poco::AutoPtr; using Poco::Util::AbstractConfiguration; using Poco::Util::Application; using Poco::Util::HelpFormatter; using Poco::Util::Option; using Poco::Util::OptionCallback; using Poco::Util::OptionSet; class SampleApp : public Application { public: SampleApp() : _helpRequested(false) {} protected: void initialize(Application &self) { loadConfiguration(); Application::initialize(self); } void uninitialize() { Application::uninitialize(); } void reinitialize(Application &self) { Application::reinitialize(self); } void defineOptions(OptionSet &options) { Application::defineOptions(options); options.addOption( Option("help", "h", "display help information on command line arguments") .required(false) .repeatable(false) .callback(OptionCallback<SampleApp>(this, &SampleApp::handleHelp))); } void handleHelp(const std::string &name, const std::string &value) { _helpRequested = true; displayHelp(); stopOptionsProcessing(); } void displayHelp() { HelpFormatter helpFormatter(options()); helpFormatter.setCommand(commandName()); helpFormatter.setUsage("OPTIONS"); helpFormatter.setHeader( "A sample application that demonstrates some of the features of the " "Poco::Util::Application class."); helpFormatter.format(std::cout); } int main(const ArgVec &args) { if (!_helpRequested) { logger().information("Command line:"); std::ostringstream ostr; logger().information(ostr.str()); logger().information("Arguments to main():"); for (const auto &it : args) { logger().information(it); } } return Application::EXIT_OK; } private: bool _helpRequested; }; POCO_APP_MAIN(SampleApp)
рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рд╣реИрдВ:
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
рдЬрд░реНрдирд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП:
рдХрдордЬреЛрд░реА, рдореЙрдбреНрдпреВрд▓ рдФрд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ред
"рдХреЙрд░реНрдкреЛрд░реЗрдЯ" рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХрдордЬреЛрд░реА рдХреБрдЫ рддрдВрддреНрд░реЛрдВ рдХреЗ рддреНрд╡рд░рд┐рдд рдФрд░ рджрд░реНрдж рд░рд╣рд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдпрд╣ рдЖрд╡реЗрджрди рдХреЗ рднреАрддрд░ рдФрд░ рд╕реНрд╡рдпрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлрд╝реНрдЯред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ, C ++ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗред рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЦрд░рд╛рдм рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдПрдХ "рд╕рдВрдХрд▓рд┐рдд" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд░рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рддреНрд╡рд░рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдкреНрд▓рдЧрдЗрдиреНрд╕ рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ! рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдорджрдж рд╕реЗ, рдЖрдк рди рдХреЗрд╡рд▓ рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдПрдХ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред "рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЙрд▓" рдЙрд░реНрдл тАЛтАЛрдЖрд░рдкреАрд╕реА рдХреА рдПрдХ рдкреВрд░реА рджреБрдирд┐рдпрд╛ рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рддрдВрддреНрд░, RPC рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ , рдЬрд╛рд╡рд╛ рджреБрдирд┐рдпрд╛ рд╕реЗ OSGI рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдЙрддреНрдкрдиреНрди рд╣реБрдЖред C ++ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдПрдХ рд╣реИ, рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ:
"рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░" POCO OSP рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдореЙрдбреНрдпреВрд▓
#include "Poco/OSP/BundleActivator.h" #include "Poco/OSP/BundleContext.h" #include "Poco/ClassLibrary.h" namespace HelloBundle { class BundleActivator: public Poco::OSP::BundleActivator { public: void start(Poco::OSP::BundleContext::Ptr pContext) { pContext->logger().information("Hello, world!"); } void stop(Poco::OSP::BundleContext::Ptr pContext) { pContext->logger().information("Goodbye!"); } }; }
рдЕрдкрд╛рдЪреЗ рд╕реЗрд▓рд┐рдХреНрд╕ "рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░" рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдореЙрдбреНрдпреВрд▓
#include "Bar.h" #include "BarActivator.h" using namespace celix::dm; DmActivator* DmActivator::create(DependencyManager& mng) { return new BarActivator(mng); } void BarActivator::init() { std::shared_ptr<Bar> bar = std::shared_ptr<Bar>{new Bar{}}; Properties props; props["meta.info.key"] = "meta.info.value"; Properties cProps; cProps["also.meta.info.key"] = "also.meta.info.value"; this->cExample.handle = bar.get(); this->cExample.method = [](void *handle, int arg1, double arg2, double *out) { Bar* bar = static_cast<Bar*>(handle); return bar->cMethod(arg1, arg2, out); }; mng.createComponent(bar) //using a pointer a instance. Also supported is lazy initialization (default constructor needed) or a rvalue reference (move) .addInterface<IAnotherExample>(IANOTHER_EXAMPLE_VERSION, props) .addCInterface(&this->cExample, EXAMPLE_NAME, EXAMPLE_VERSION, cProps) .setCallbacks(&Bar::init, &Bar::start, &Bar::stop, &Bar::deinit); }
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд┐рддрд░рд┐рдд рдХрдордЬреЛрд░ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдРрд╕реЗ рддрдВрддреНрд░ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рд▓реЗрдирджреЗрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд▓рд╣рд╛рд▓ C ++ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рдпрд╛рдиреА рдЬрд┐рд╕ рддрд░рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрд╕реА рддрд░рд╣ рдПрдХ рд▓реЗрди-рджреЗрди рдХреЗ рднреАрддрд░ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдПрд╕реНрдм, рд╡рд┐рддрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдмреЗрд╢рдХ, рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рдпрд╣ рдХрд╣реЗрдЧрд╛ рдХрд┐ software transactional memory
, рд╣рд╛рдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рд▓реЗрдирджреЗрди рддрдВрддреНрд░ рдХреЛ рдЕрдкрдиреЗ рджрдо рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред
рдЙрдкрдХрд░рдг
рд╕рднреА рдХрдИ рд╕рд╣рд╛рдпрдХ рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдореИрдВ рдХреНрд░рдордмрджреНрдзрддрд╛ рдФрд░ рдбреАрдПрд╕рдПрд▓ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдЖрдкрдХреЛ рдХрдИ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдФрд░ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
рдХреНрд░рдордмрджреНрдзрддрд╛
рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдмрд┐рдЯреНрд╕ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдСрдкрд░реЗрд╢рди рдХрд╛ рд╡рд┐рд▓реЛрдо рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝реЗрд╢рди (рд╕реНрдЯреНрд░рдХреНрдЪрд░рд┐рдВрдЧ) рдСрдкрд░реЗрд╢рди рд╣реИ - рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдмрд┐рдЯ рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ред C ++ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЖрдЬ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдЗрд╕ рд╡рд╕реНрддреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдерд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЦреЗрддреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБред рдЗрд╕рд▓рд┐рдП, рдореИрдВ C ++ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рдореБрдЦреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реВрдВрдЧрд╛:
- рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреНрд░рдорд╛рдВрдХрди
- рдФрдкрдЪрд╛рд░рд┐рдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреНрд░рдордмрджреНрдзрддрд╛
рд╕рд╛рд╣рд┐рддреНрдп рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдЕрдХреНрд╕рд░ рдмрд╛рдЗрдирд░реА рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдЕрд▓рдЧрд╛рд╡ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрд▓рдЧрд╛рд╡ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MsgPack рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдмрдЪрд╛рддрд╛ рд╣реИ, рддрджрдиреБрд╕рд╛рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕рд╣реА рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ MsgPack рдкреНрд░рд╛рд░реВрдк рдмрд╛рдЗрдирд░реА рд╣реИред Protobuf , рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рд╕рднреА рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ Protobuf рднреА рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╣реИред
рддреЛ рдХреНрд░рдордмрджреНрдзрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛, рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рд╕рднреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдФрд░ рд▓реЗрдЦ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореИрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдХреНрд░рдорд╛рдВрдХрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХ рдкрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдХрд╛рдЗрдпрд╛рдВ (рдХрдХреНрд╖рд╛рдПрдВ, рд╕рдВрд░рдЪрдирд╛рдПрдВ), рд▓рдЧрд╛рддрд╛рд░ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╛рдЗрд▓реЛрдВ рдФрд░ рдЕрдиреНрдп рд▓рд┐рдкрд┐рдпреЛрдВ рдореЗрдВ, рдЬреЛ рдХрд┐ рдмрд┐рдирд╛ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдФрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреА рд╣реИрдВред рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо, рдЯреЗрдХреНрд╕реНрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ, рдЖрджрд┐ред
рдпрд╣рд╛рдБ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рд╣реИрдВ:
рдбреАрдПрд╕рдПрд▓
рдбреЛрдореЗрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛ - рдЕрдкрдиреЗ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ред рджрд░рдЕрд╕рд▓, рдЬрдм рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЙрджреНрдпрдо рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдореЗрдВ рд▓рдЧреЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рднреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░, рд╡реНрдпрд╛рдкрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд▓рдЧреЗ рд╣реБрдП рд╣реИрдВред рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ред рдФрд░ рдЕрдЧрд░ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдЦреБрдж рдХреЗ рдбреАрдПрд╕рдПрд▓ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореМрдЬреВрджрд╛ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдирдП рдЬреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХреЗрдВред рд╕реА ++ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдЖрдкрдХреЗ рдбреАрдПрд╕рдПрд▓ рдХреЗ "рддреЗрдЬ" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИрдВред рдмреЗрд╢рдХ, C ++ рдореЗрдВ рд▓реБрдЖ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рд╣реИрдВ - рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо, рд▓реЗрдХрд┐рди "рд╕рдм рдХреБрдЫ" рдХреЗ рд▓рд┐рдП рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдЗрдВрдЬрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреМрди рд╣реИ?! рддреЛ рд╣рдо рдЙрди рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ рдбреАрдПрд╕рдПрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
Boost.Proto рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рд┐рд░реНрдл рдЖрдкрдХреА рдЦреБрдж рдХреА рдбреАрдПрд╕рдПрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИ, рдпрд╣ рдЗрд╕рдХрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдЙрджреНрджреЗрд╢реНрдп рд╣реИ, рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
#include <iostream> #include <boost/proto/proto.hpp> #include <boost/typeof/std/ostream.hpp> using namespace boost; proto::terminal< std::ostream & >::type cout_ = { std::cout }; template< typename Expr > void evaluate( Expr const & expr ) { proto::default_context ctx; proto::eval(expr, ctx); } int main() { evaluate( cout_ << "hello" << ',' << " world" ); return 0; }
рдлреНрд▓реЗрдХреНрд╕ рдФрд░ рдмрд╛рдЗрд╕рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЗ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рд▓рд┐рдП рд▓реЗрдХрд░реНрд╕ рдФрд░ рдкрд╛рд░реНрд╕рд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдХреЛрдб
%{ #include <math.h> %} DIGIT [0-9] ID [az][a-z0-9]* %% {DIGIT}+ { printf( "An integer: %s (%d)\n", yytext, atoi( yytext ) ); } {DIGIT}+"."{DIGIT}* { printf( "A float: %s (%g)\n", yytext, atof( yytext ) ); } if|then|begin|end|procedure|function { printf( "A keyword: %s\n", yytext ); } {ID} printf( "An identifier: %s\n", yytext ); "+"|"-"|"*"|"/" printf( "An operator: %s\n", yytext ); "{"[^}\n]*"}" /* eat up one-line comments */ [ \t\n]+ /* eat up whitespace */ . printf( "Unrecognized character: %s\n", yytext ); %% main( argc, argv ) int argc; char **argv; { ++argv, --argc; /* skip over program name */ if ( argc > 0 ) yyin = fopen( argv[0], "r" ); else yyin = stdin; yylex(); }
рдФрд░ рдлрд┐рд░ рднреА, SCXML рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╣реИ - рд░рд╛рдЬреНрдп рдЪрд╛рд░реНрдЯ рдПрдХреНрд╕рдПрдордПрд▓: рдирд┐рдпрдВрддреНрд░рдг рдорд╢реАрди рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдиреЛрдЯреЗрд╢рди, рдПрдХреНрд╕рдПрдордПрд▓ рдЬреИрд╕реЗ рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рд╡рд┐рд╡рд░рдгред рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдбреАрдПрд╕рдПрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрдВрддреНрд░ рднреА рд╣реИред Qt SCXML рдХрд╛ рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЗрддрдиреЗ рд▓рдЪреАрд▓реЗ рдирд╣реАрдВ рд╣реИрдВред
рдпрд╣ SCXML рд╕рдВрдХреЗрддрди рдореЗрдВ рдПрдлрд╝рдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬреЛ Qt рдкреНрд░рд▓реЗрдЦрди рд╕рд╛рдЗрдЯ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" name="FtpClient" datamodel="ecmascript"> <state id="G" initial="I"> <transition event="reply" target="E"/> <transition event="cmd" target="F"/> <state id="I"> <transition event="reply.2xx" target="S"/> </state> <state id="B"> <transition event="cmd.DELE cmd.CWD cmd.CDUP cmd.HELP cmd.NOOP cmd.QUIT cmd.SYST cmd.STAT cmd.RMD cmd.MKD cmd.PWD cmd.PORT" target="W.general"/> <transition event="cmd.APPE cmd.LIST cmd.NLST cmd.REIN cmd.RETR cmd.STOR cmd.STOU" target="W.1xx"/> <transition event="cmd.USER" target="W.user"/> <state id="S"/> <state id="F"/> </state> <state id="W"> <onentry> <send eventexpr=""submit." + _event.name"> <param name="params" expr="_event.data"/> </send> </onentry> <transition event="reply.2xx" target="S"/> <transition event="reply.4xx reply.5xx" target="F"/> <state id="W.1xx"> <transition event="reply.1xx" target="W.transfer"/> </state> <state id="W.transfer"/> <state id="W.general"/> <state id="W.user"> <transition event="reply.3xx" target="P"/> </state> <state id="W.login"/> </state> <state id="P"> <transition event="cmd.PASS" target="W.login"/> </state> </state> <final id="E"/> </scxml>
рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ SCXML рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ

рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдФрд░ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди
рдпрд╣ рд╢рд╛рдпрдж ++ рдХреЗ рд╕рд╛рде рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ "рдкреАрдбрд╝рд╛рджрд╛рдпрдХ" рд╡рд┐рд╖рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдПрдХ c ++ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреА рджреБрдирд┐рдпрд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рд░ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИред рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдПрдХ рд╡рд╕реНрддреБ рдпрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╣реИ, рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдЬрд╕рди рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ - рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо, ++ - рдЙрдкрдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде, рдирд┐рд░рд╛рд╢рд╛ рди рдХрд░реЗрдВ рдФрд░ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ рдЦреЛрдЬреЗрдВред рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ DBMS рд╕реЗред
рдЕрдм рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди ODBC рд╕рдВрдмрдВрдзрдкрд░рдХ DBMS рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рддрдВрддреНрд░ рд╣реИ, рдЕрднреА рддрдХ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди C ++ - рд╕рдореБрджрд╛рдп рдЕрднреА рднреА рдЦрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдЬ рднреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИрдВ рдЬреЛ рдХрдИ DBMS рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЗрдВрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреАрдмреАрдПрдордПрд╕ рдХреЛ рдПрдХреАрдХреГрдд рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ
рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ C ++ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рджрдХреНрд╖рддрд╛ рддреБрд░рдВрдд рдЖрдкрдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рдЖрддреА рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг C ++ рдореЗрдВ ORM рд╣реИрдВред рд╣рд╛рдБ рд╣реИрдВ! рдФрд░ рд╡реИрд╕реЗ, SOCI ORM рддрдВрддреНрд░ рдХреЛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╕рдорд╛рдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ :: type_conversion рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕рдХрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдЙрджреНрджреЗрд╢реНрдп рдирд╣реАрдВ рд╣реИред
- LiteSQL C ++ - ORM, рдЬреЛ рдЖрдкрдХреЛ DBMS SQLite3, PostgreSQL, MySQL рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде xml-files рдХреЛ рдкреНрд░реА-рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддрд╛рдХрд┐ litesql-gen рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрд░реЛрдд рддреИрдпрд╛рд░ рдХрд┐рдП рдЬрд╛ рд╕рдХреЗрдВред
- рдХреЛрдб рд╕рд┐рдВрдереЗрд╕рд┐рд╕ рд╕реЗ рдУрдбреАрдмреА рдПрдХ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдУрдЖрд░рдПрдо рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдордзреНрдпрд╡рд░реНрддреА рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реА ++ рдХреЗ рднреАрддрд░ рд░рд╣рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
#pragma db object class person {
- Wt ++ рдПрдХ рдмрдбрд╝рд╛ рдврд╛рдВрдЪрд╛ рд╣реИ, рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ ORM рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ DBMS Sqlite3, Firebird, MariaDB / MySQL, MSSQL Server, PostgreSQL рдФрд░ Oracle рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
- рдореИрдВ ORM рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╕рд╛рдЗрдХреНрд▓рд╛рдИрдЯ sqlite_orm рдФрд░ hiberlite рдкрд░ рднреА рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ ред рдЪреВрдВрдХрд┐ sqlite рдПрдХ рдПрдореНрдмреЗрдбреЗрдб DBMS рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП ORM рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рднреА рдЗрдВрдЯрд░реИрдХреНрд╢рди, рд╕рдВрдХрд▓рди-рд╕рдордп рдореЗрдВ, рддреНрд╡рд░рд┐рдд рддреИрдирд╛рддреА рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
- QHibernate - Postgresql рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде Qt5 рдХреЗ рд▓рд┐рдП ORMред рдЬрд╛рд╡рд╛ рд╕реЗ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рд▓рдердкрдеред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ DBMS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреАрдХрд░рдг рдХреЛ "рдПрдХреАрдХрд░рдг" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдХреЛрд╖реНрдардХ рдХреЗ рдмрд╛рд╣рд░ рдЫреЛрдбрд╝рдирд╛ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреАрдХрд░рдг рдкрд░ рдЬрд╛рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
рдЖрд░рдкреАрд╕реА - рд░рд┐рдореЛрдЯ рдкреЛрд░рд╕рд▓реЗрд╕ рдХреЙрд▓, "рд╕рд░реНрд╡рд░" рдХреЗ рд╕рд╛рде "рдХреНрд▓рд╛рдЗрдВрдЯ" рдХреА рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рддрдХрдиреАрдХред рдУрдЖрд░рдПрдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЦреНрдп рдХрдард┐рдирд╛рдИ рдХреЛрдб рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕рд╣рд╛рдпрдХ рдлрд╛рдЗрд▓реЗрдВ рд▓рд┐рдЦрдирд╛ / рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реАрдзреЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╡рд┐рднрд┐рдиреНрди рдЖрд░рдкреАрд╕реА рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕рдорд╛рдзрд╛рди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред
- grpc рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП Google рд╕реЗ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ, рдЬреЛ Google рд╕реЗ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рдФрд░ рдХреБрд╢рд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ google protobuf рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХреНрд░рдордмрджреНрдзрддрд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реИред
- json-rpc - RPC, рдЬрд╣рд╛рдБ JSON рдХреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг libjson-rpc-cpp рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рдпрд╣рд╛рдБ рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
[ { "name": "sayHello", "params": { "name": "Peter" }, "returns" : "Hello Peter" }, { "name" : "notifyServer" } ]
рдЗрд╕ рд╡рд┐рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, JSON-RPC 1.0 рдФрд░ 2.0 рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ C ++ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред
- рдПрдХреНрд╕рдПрдордПрд▓-рдЖрд░рдкреАрд╕реА рдФрд░ рдПрд╕рдУрдПрдкреА - рдпрд╣рд╛рдВ рд╕реНрдкрд╖реНрдЯ рдиреЗрддрд╛ - рдЬреАрдПрд╕рдУрдПрдкреА рд╣реИ , рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреЛрдИ рдпреЛрдЧреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо xml-rpc рдпрд╛ рд╕рд╛рдмреБрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдЬрдирд░реЗрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВ, рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдХреНрд╕рдПрдордПрд▓-рдЖрд░рдкреАрд╕реА рдЕрдВрдХрди рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг:
<?xml version="1.0"?> <methodCall> <methodName>examples.getState</methodName> <params> <param> <value><i4>41</i4></value> </param> </params> </methodCall> <methodResponse> <params> <param> <value><string>State-Ready</string></value> </param> </params> </methodResponse>
- рдкреЛрдХреЛ :: RemotingNG pocoproject рд╕реЗ рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдХрдХреНрд╖рд╛рдПрдВ, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЖрджрд┐ред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
typedef unsigned long GroupID; typedef std::string GroupName;
рд╕рд╣рд╛рдпрдХ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ "рдХрдВрдкрд╛рдЗрд▓рд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗрд╡рд▓ POCO рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рднреБрдЧрддрд╛рди рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдереА, рд▓реЗрдХрд┐рди macchina.io рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдЖрдк рдЗрд╕реЗ рдореБрдлреНрдд рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрд╕реЗрдЬрд┐рдВрдЧ рдПрдХ рд╡реНрдпрд╛рдкрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдмрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХрд░реВрдБрдЧрд╛, рдЕрд░реНрдерд╛рддреН, рдореИрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдКрдБрдЧрд╛, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рд╡рд╛ рдореИрд╕реЗрдЬ рд╕рд░реНрд╡рд┐рд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП AMQP рдпрд╛ STOMP ред рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдмрд╕, рдЬрд┐рд╕реЗ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╕рд░реНрд╡рд┐рдЬрд╝ рдмрд╕ (ESB) рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╕реЗрдЧрдореЗрдВрдЯ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдмрд╣реБрдд рдЖрдо рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкреЙрдЗрдВрдЯ-рдЯреВ-рдкреЙрдЗрдВрдЯ рдФрд░ рдкрдмреНрд▓рд┐рд╢-рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЖрдИрдЯреА рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡реЛрдВ рдХреЛ рдЖрдкрд╕ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред C ++ рдореЗрдВ рдХреБрдЫ рдЗрдВрдбрд╕реНрдЯреНрд░рд┐рдпрд▓ рдореИрд╕реЗрдЬ рдмреНрд░реЛрдХрд░ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдореИрдВ рджреЛ рдЬрд╛рдирддрд╛ рд╣реВрдВ: Apache Qpid рдФрд░ UPMQ , рдФрд░ рджреВрд╕рд░рд╛ рдореЗрд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХреНрд▓рд┐рдкреНрд╕ рдореЙрд╕реНрдХрд┐рдЯреЛ рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╣ рд╕реА рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП JMS рдХреА рд╕реБрдВрджрд░рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдЙрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, JMS рдХреЛ ODBC рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рджрд┐рди рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдЬреЗрдПрдордПрд╕ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗ рд▓рд┐рдП рд╕реА ++, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХрдо рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдВрджреЗрд╢ рджрд▓рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп C ++ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдЧрд╛:
рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЖрдо рддреМрд░ рдкрд░ рдЬреЗрдПрдордПрд╕ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ ODBC рд▓рд┐рдЦрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрджреЗрд╢ рджрд▓рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рддрд╛рдХрд┐ рд╣рд░ C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдо рдкреАрдбрд╝рд┐рдд рд╣реЛред
рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА
рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬреЛ рд╕реАрдзреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реЗ рдЕрдВрдд рддрдХ рдЬреБрдбрд╝рд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, C ++ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХрдо рд╕реЗ рдХрдо рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕ рдкреИрдЯрд░реНрди рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдирд┐рд░реНрдгрдп рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рд╣реИ, рдФрд░ рд╡рд╣ рдврд╛рдВрдЪрд╛ рдЬреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдк рдЯреАрд╕реАрдкреА рдпрд╛ рдпреВрдбреАрдкреА рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рддреИрдпрд╛рд░ рд░рд╣реЗрдВ рдХрд┐ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ "рд╕реНрдорд╛рд░реНрдЯ" рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрдХрд░рдг рдЖрдкрдХреЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд░реЛрдХ рджреЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЕрдкрдиреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдкреИрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, https рдореЗрдВ рдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп:
- Boost.Asio рдФрд░ Boost.Beast - рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реЗ рдПрдХ, HTTP рдФрд░ WebSockets рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ
- рдкреЛрдХреЛ :: рдиреЗрдЯ рднреА рдПрдХ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдорд╛рдзрд╛рди рд╣реИ, рдФрд░ рдХрдЪреНрдЪреА рдмрд╛рддрдЪреАрдд рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЯреАрд╕реАрдкреА рд╕рд░реНрд╡рд░ рдлреНрд░реЗрдорд╡рд░реНрдХ, рд░рд┐рдПрдХреНрдЯрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП HTTP, рдПрдлрд╝рдЯреАрдкреА рдФрд░ рдИ-рдореЗрд▓ рдХреЗ рддреИрдпрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред WebSockets рдХрд╛ рд╕рдорд░реНрдерди рднреА рд╣реИ
- ACE - рдиреЗ рдХрднреА рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдпреЛрдЧреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рднреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЕрдзрд┐рдХ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреАрдХреГрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред
- рдХреНрдпреВрдЯреА рдиреЗрдЯрд╡рд░реНрдХ - рдХреНрдпреВрдЯреА рдореЗрдВ, рдиреЗрдЯрд╡рд░реНрдХ рднрд╛рдЧ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдмрд┐рдВрджреБ рд╕рд░реНрд╡рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рдФрд░ рд╕реНрд▓реЙрдЯ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд░реНрд╡рд░ Qt рдкрд░ рд╣реИ !?
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЬреЛ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд╡рд╣ рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рд╣реИред рдпрджрд┐ рдореИрдВ рд╕рдлрд▓ рд╣реБрдЖ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдЖрднрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдерд╛, рдПрдХ "рдЙрджреНрдпрдо рд╕рдВрд╕реНрдХрд░рдг" рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИрдВ, рдХреЗрд╡рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рд╣реИред рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИред рдХреЙрд░реНрдкреЛрд░реЗрдЯ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдкреВрд░реНрдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдорд╛рдирдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдЕрдкрдиреЗ рджрдо рдкрд░ рдореИрдВ рдХреЗрд╡рд▓ рдмреИрдХреЙрдиреНрдб рдХреЗ рд▓рд┐рдП рд╢реЛрдз рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЛрдз рдХреЗ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ pocoproject рдФрд░ maccina.io рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореИрдВ "рд╕реА ++ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рд╕рдВрд╕реНрдХрд░рдг" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ!