{"id":152345,"date":"2012-10-29T22:24:04","date_gmt":"2012-10-29T18:24:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=152345"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=152345","title":{"rendered":"<span class=\"post_title\">WebServer \u043a\u0430\u043a \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" align=\"left\" src=\"http:\/\/habrastorage.org\/storage2\/1be\/d1d\/02c\/1bed1d02c8c5763a05de3cf733e4d021.png\"\/><\/p>\n<h4>\u0421 \u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c<\/h4>\n<p>  \u041d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u043c\u0435\u043d\u044f \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0438 \u00ab\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438\u00bb. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0435\u0440\u0444\u0438\u043d\u0433 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0447\u0442\u0435\u043d\u0438\u0435 man\u2019\u043e\u0432 \u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u2014 \u044d\u0442\u043e \u0432\u0441\u0435, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u0442 \u0447\u0435\u0442\u043a\u043e\u0439 \u0446\u0435\u043b\u0438. \u041f\u0440\u0438\u0434\u0443\u043c\u0430\u0432 \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043f\u043b\u043e\u0445\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0430\u0432\u044b\u043a\u043e\u0432.<\/p>\n<p>  \u0412 \u043e\u0434\u0438\u043d \u0438\u0437 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0443\u0447\u043d\u043e \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435 \u043e\u0442 \u0440\u0443\u0442\u0438\u043d\u044b, \u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0433\u0430\u043b\u043a\u0443 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b, \u0447\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0442\u0438\u0432 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0440\u044b\u043d\u043e\u043a, \u0432\u0434\u0440\u0443\u0433, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u043e\u043f\u0430\u0434\u0435\u0442\u0441\u044f\u2026 \u041a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u044f\u043c\u0438, \u043d\u0430 \u0442\u0435\u043c\u0443: \u00ab\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0412\u0430\u0441 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u00bb. \u0421\u0440\u0435\u0434\u0438 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u0438\u0448\u043b\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c \u0437\u0430\u0434\u0430\u043d\u0438\u0435\u043c. \u0422\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u2013 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c WebServer\u2019\u0430 \u043d\u0430 C++ \u043f\u043e\u0434 Linux \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 HTTP\u2013\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430; \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439\u2026 <br \/>  <a name=\"habracut\"><\/a><br \/>  \u0412\u0437\u044f\u0432 \u0444\u0440\u0430\u0437\u0443 \u0438\u0437 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0438 \u0432\u0431\u0438\u0432 \u0435\u0435 \u0432 Google, \u044f \u043d\u0430\u0448\u0435\u043b \u0435\u0449\u0435 \u043e\u0442\u0437\u044b\u0432\u043e\u0432 \u043e \u0442\u0430\u043a\u043e\u043c \u043d\u0435 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0437\u0430\u0434\u0430\u043d\u0438\u0438 \u043d\u0430 \u0444\u043e\u0440\u0443\u043c\u0435 <a href=\"http:\/\/www.rsdn.ru\/forum\/job\/4795893.flat\">RSDN<\/a>. \u0417\u0430\u0434\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043e\u0434\u0438\u043d \u0432 \u043e\u0434\u0438\u043d \u043b\u0435\u0436\u0430\u0449\u0435\u043c\u0443 \u0432 \u043c\u043e\u0435\u043c \u043f\u043e\u0447\u0442\u043e\u0432\u0438\u043a\u0435. \u041a\u0430\u043a \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u043d\u0435 \u0441\u0442\u0430\u043b. \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u043f\u0440\u043e\u0441\u0442: \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0435\u0441\u043b\u0438 \u0438 \u0441\u0442\u043e\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c, \u0442\u043e \u043e\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043d\u0430 4 \u0447\u0430\u0441\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043e. \u041d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432 \u0434\u0435\u043b\u0435 \u0432\u0441\u0435, \u043e \u0447\u0435\u043c \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043e \u0438 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u042d\u0442\u043e \u0438 \u0441\u0442\u0430\u043b\u043e \u0441\u0442\u0438\u043c\u0443\u043b\u043e\u043c, \u0442.\u0435. \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041a \u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0442\u043e\u0440\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u044d\u0442\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u0435, \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u043e\u0442 \u043a\u0430\u0434\u0440\u043e\u0432\u043e\u0433\u043e \u0430\u0433\u0435\u043d\u0441\u0442\u0432\u0430, \u043d\u043e \u0438 \u043d\u0435 \u0442\u0430\u043a \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 API, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u043e\u044e \u0431\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435. \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 WebServer\u2019\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u00ab\u043f\u043e\u0434\u0435\u043b\u043e\u043a\u00bb. \u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u00ab\u0431\u043e\u0440\u043e\u0434\u0430\u0442\u044b\u0445\u00bb \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439, \u043d\u043e \u043a\u0430\u043a \u043e\u0431\u0437\u043e\u0440 \u043b\u044e\u0434\u044f\u043c, \u0441\u0442\u0430\u043b\u043a\u043d\u0443\u0432\u0448\u0438\u043c\u0441\u044f \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 (\u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0435\u0441\u0442\u0430\u0445) \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430. \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c \u0432\u0441\u0435\u0445, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043e\u0442 \u00ab\u0431\u043e\u0440\u043e\u0434\u0430\u0442\u044b\u0445\u00bb \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043e\u043f\u044b\u0442\u043e\u043c, \u043d\u043e, \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u0438 \u043f\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f\u2026<\/p>\n<h4>\u041e\u0431\u0437\u043e\u0440 API \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a<\/h4>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u043b\u0438 API *nix \u0441\u0438\u0441\u0442\u0435\u043c, API Windows (\u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0445\u043e\u0442\u044c \u0438 \u043d\u0435\u0442 \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u0446\u0435\u043b\u044f\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438) \u0438 \u0442\u0430\u043a\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u0430\u043a boost.asio \u0438 libevent.<\/p>\n<p>  <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%BE%D0%BA%D0%B5%D1%82%D1%8B_%D0%91%D0%B5%D1%80%D0%BA%D0%BB%D0%B8\">\u0421\u043e\u043a\u0435\u0442\u044b \u0411\u0435\u0440\u043a\u043b\u0438 <\/a> \u0445\u043e\u0442\u044c \u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439, \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043d\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u043d \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c. \u0422\u0430\u043a \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 close \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043e\u043a\u0435\u0442\u0430, \u0430 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 closesocket; \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0434\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 (Windows \u2013 WSAStartup\/WSACleanup), \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442; \u0433\u0434\u0435-\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u043c \u0441\u043e\u043a\u0435\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0438\u043f int, \u0430 \u0433\u0434\u0435-\u0442\u043e SOCKET \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043c\u0435\u043b\u043a\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a pImpl \u0438 \u043f\u0440\u043e\u0447\u0438\u0435, \u0442\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0430 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e, \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e. \u0412\u0441\u0435 \u044d\u0442\u0438 \u043c\u0435\u043b\u043e\u0447\u0438 \u0441\u043a\u0440\u044b\u0442\u044b \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u0442\u0438\u043f\u0430 <a href=\"http:\/\/www.boost.org\/doc\/libs\/1_51_0\/doc\/html\/boost_asio.html\">boost.asio<\/a>, <a href=\"http:\/\/libevent.org\/\">libevent<\/a> \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b API \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u043e\u043a\u0435\u0442\u0430\u043c\u0438, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u0435\u0437 \u043d\u0430\u043c\u0435\u043a\u043e\u0432 \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439:  <\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u043a\u0435\u0442<\/li>\n<li>\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u043e\u043a\u0435\u0442 \u043a \u0441\u0435\u0442\u0435\u0432\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443<\/li>\n<li>\u041f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u043a\u0435\u0442, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u0435\u0442\u0435\u0432\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443<\/li>\n<li>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f<\/li>\n<li>\u0420\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043d\u0430 \u0441\u043e\u043a\u0435\u0442\u0430\u0445<\/li>\n<\/ol>\n<p>  \u0412\u0441\u0435 \u043f\u0443\u043d\u043a\u0442\u044b, \u043a\u0440\u043e\u043c\u0435 \u043f\u044f\u0442\u043e\u0433\u043e, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0445\u043e\u0436\u0438 \u0438 \u043c\u0430\u043b\u043e\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b, \u0430 \u0432\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043d\u0430 \u0441\u043e\u043a\u0435\u0442\u0435 \u043c\u043d\u043e\u0433\u043e \u0438 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438\u0445 \u0447\u0430\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 Windows, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b:  <\/p>\n<ol>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 select. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 \u043a\u043e\u0434\u043e\u043c \u0438\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c, \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043b\u044e\u0441\u043e\u0432 \u0443 \u043d\u0435\u0433\u043e \u0442\u0443\u0442 \u043d\u0435\u0442.<\/li>\n<li>WSAAsyncSelect \u2013 \u041f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043e\u043a\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430 \u0441\u043e\u043a\u0435\u0442\u0435 \u0432 \u043e\u043a\u043e\u043d\u043d\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u041d\u0435 \u0431\u044b\u0441\u0442\u0440 \u0438 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u043a\u0430\u043a \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/li>\n<li>WSAEventSelect \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u00ab\u0441\u043e\u0431\u044b\u0442\u0438\u0435\u00bb \u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435. \u0423\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043d\u0430 \u0441\u043e\u0442\u043d\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439, \u0442\u043e \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \/ \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/li>\n<li>\u041f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u044b\u0439 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434 \u2013 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u0447\u0435\u043c WSAEventSelect, \u043d\u043e \u0438 \u0431\u043e\u043b\u0435\u0435 \u0442\u0440\u0443\u0434\u043e\u0437\u0430\u0442\u0440\u0430\u0442\u0435\u043d \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435.<\/li>\n<li>\u041f\u043e\u0440\u0442\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u2013 \u0434\u043b\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/li>\n<\/ol>\n<p>  \u0415\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u043a\u043d\u0438\u0433\u0430 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438 \u043f\u043e\u0434 Windows \u2013 \u00ab\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0441\u0435\u0442\u044f\u0445 Microsoft Windows\u00bb.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 *nix \u0441\u043e\u0441\u0442\u0435\u043c\u044b, \u0442\u043e \u0442\u0430\u043c \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u0435 \u043c\u0430\u043b\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u0439:  <\/p>\n<ol>\n<li>\u0422\u043e\u0442 \u0436\u0435 select. \u0418 \u043e\u043f\u044f\u0442\u044c \u0435\u0433\u043e \u0440\u043e\u043b\u044c \u2013 \u044d\u0442\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u0438\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u043c\u0438. \u0422\u0430\u043a \u0436\u0435 \u043d\u0435 \u0431\u044b\u0441\u0442\u0440, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 (\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435) \u043f\u0440\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0438 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0438\u0437 \u0441\u043e\u043a\u0435\u0442\u043e\u0432, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043d \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u0442. \u041f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e \u0432\u0441\u0435\u043c \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0438\u0437 \u0441\u043e\u043a\u0435\u0442\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435. \u041e\u0431\u043e\u0431\u0449\u0430\u044f: \u043e\u0434\u043d\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u2013 \u044d\u0442\u043e \u043f\u0440\u043e\u0431\u0435\u0433 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043f\u0443\u043b\u0443 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0445 \u0441\u043e\u043a\u0435\u0442\u043e\u0432.<\/li>\n<li>poll \u2013 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043d\u043e \u043d\u0435 \u0440\u0430\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u043a\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f.<\/li>\n<li>epoll (Linux \u0441\u0438\u0441\u0442\u0435\u043c\u044b) \u0438 kqueue (FreeBSD) \u2013 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b, \u043d\u043e \u044f\u0440\u043e\u0441\u0442\u043d\u044b\u0435 \u043f\u043e\u043a\u043b\u043e\u043d\u043d\u0438\u043a\u0438 FreeBSD \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0444\u043e\u0440\u0443\u043c\u0430\u0445 \u043e\u0447\u0435\u043d\u044c \u0433\u043e\u0440\u044f\u0447\u043e \u0442\u0432\u0435\u0440\u0434\u044f\u0442, \u0447\u0442\u043e kqueue \u043a\u0443\u0434\u0430 \u043c\u043e\u0433\u0443\u0447\u0435\u0435. \u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u0436\u0438\u0433\u0430\u0442\u044c \u0441\u0432\u044f\u0449\u0435\u043d\u043d\u044b\u0435 \u0432\u043e\u0439\u043d\u044b\u2026 \u042d\u0442\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 *nix \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445. \u0415\u0441\u043b\u0438 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u043e \u0438\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u043e\u043d \u0436\u0435 \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u043e \u2013 \u043e\u043d\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u044a\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0435\u0439\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u0442\u0435\u043c \u0441\u043e\u043a\u0435\u0442\u0430\u043c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0438 \u043d\u0435 \u043d\u0430\u0434\u043e \u0431\u0435\u0433\u0430\u0442\u044c \u043f\u043e \u0432\u0441\u0435\u043c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0447\u0442\u043e \u0438 \u0433\u0434\u0435 \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0422\u0430\u043a \u0436\u0435 \u044d\u0442\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0440\u0430\u0441\u0447\u0438\u0442\u0430\u043d\u044b \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439.<\/li>\n<\/ol>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044f\u0445 \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435, \u043d\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438:  <\/p>\n<ol>\n<li>sendfile (Linux) \u0438 TransmitFile (Windows) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c \u0438\u043c \u043f\u0430\u0440\u0443 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439 \u00ab\u043e\u0442\u043a\u0443\u0434\u0430\u00bb \u0438 \u00ab\u043a\u0443\u0434\u0430\u00bb \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0432\u0435\u0449\u044c \u0432 HTTP \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430 \u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438, \u0447\u0442\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/li>\n<li>aio \u2013 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u043c \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0432\u043e\u0442 \u0442\u0435\u0431\u0435 \u0431\u0443\u0444\u0435\u0440, \u043f\u0438\u0448\u0438 \u0435\u0433\u043e \u0432\u043e\u0442 \u0432 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c, \u043a\u0430\u043a \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0448\u044c \u043f\u043e\u0441\u0438\u0433\u043d\u0430\u043b\u044c (\u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441 \u0447\u0442\u0435\u043d\u0438\u0435\u043c).<\/li>\n<li>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041d\u0435\u0439\u0433\u043b\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0430\u0434\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043f\u043e\u0440\u0446\u0438\u044f\u043c\u0438 \u0438 \u0431\u0435\u0437 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u043d\u0430 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u0435\u0442\u044c, \u043d\u043e \u043e\u043d \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u0435\u0437\u0435\u043d. \u0412 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445, \u043a\u0430\u043a HTTP \u0441\u0435\u0440\u0432\u0435\u0440 \u043b\u0443\u0447\u0448\u0435 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0447\u0442\u043e\u0431 \u043e\u043d\u0430 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043b\u0430 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 TCP \u0444\u0440\u0435\u0439\u043c\u044b (\u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043e\u043f\u0446\u0438\u044e \u0441\u043e\u043a\u0435\u0442\u0430 \u043a\u0430\u043a TCP_CORK).<\/li>\n<li>\u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0435\u0431\u043b\u043e\u043a\u0442\u0440\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u043a\u0435\u0442\u044b. \u0411\u0435\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432&#8230;<\/li>\n<li>\u0422\u0430\u043a \u0436\u0435 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u0430\u043a writev (nix) (\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 WSA \u0444\u0443\u043d\u043a\u0446\u0438\u0439 Windows), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0441\u0440\u0430\u0437\u0443, \u0447\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a HTTP \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u043f\u0440\u0438\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0435 \u043a \u043d\u0435\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432.<\/li>\n<\/ol>\n<p>  \u041f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043b\u0443\u0447\u0448\u0435 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0447\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043d\u0438\u0436\u0435 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 boost.asio \u0438 libevent. boost.asio \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, libevent \u2013 \u044d\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0430.<\/p>\n<h4>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 epoll<\/h4>\n<p>  \u041a\u0430\u043a\u043e\u0439 \u0431\u044b \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043d\u0435 \u0431\u044b\u043b \u0431\u044b \u0432\u044b\u0431\u0440\u0430\u043d \u0434\u043b\u044f \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f epoll, poll, select, \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u044e\u0430\u043d\u0441\u043e\u0432.<\/p>\n<p>  \u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u0435\u0440\u0432\u044b\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u2013 \u044d\u0442\u043e \u0432\u044b\u0431\u043e\u0440 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u0442\u0435\u0445, \u043a\u043e\u043c\u0443 \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u00ab\u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0441\u043e\u043a\u0435\u0442\u0430\u0445\u00bb \u0432 \u0443\u0447\u0435\u0431\u043d\u044b\u0445 \u0438\u043b\u0438 \u043f\u0441\u0435\u0432\u0434\u043e\u0431\u043e\u0435\u0432\u044b\u0445 \u0446\u0435\u043b\u044f\u0445, \u0432\u044b\u0431\u0438\u0440\u0430\u043b \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u00ab\u041e\u0434\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u2013 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a\u00bb. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u043a\u0430\u043a \u0441\u0432\u043e\u0438 \u043f\u043b\u044e\u0441\u044b, \u0442\u0430\u043a \u0438 \u043c\u0438\u043d\u0443\u0441\u044b. \u0421\u0430\u043c\u044b\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043f\u043b\u044e\u0441\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041c\u0438\u043d\u0443\u0441\u043e\u0432 \u043c\u043d\u043e\u0433\u043e: \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0442\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043c\u043d\u043e\u0433\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 (\u043a\u043e\u0434\u0430, \u0447\u0435\u0433\u043e-\u0442\u043e \u0441 \u0447\u0435\u043c-\u0442\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e). \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u043f\u043b\u043e\u0445 \u0434\u043b\u044f HTTP \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0441\u0441\u0438\u044f\u043c\u0438 \u043d\u0435\u0442. \u041d\u043e, \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0418\u043c\u0435\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0432\u044b\u0431\u043e\u0440\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u2013 \u044d\u0442\u043e \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \/ \u044f\u0434\u0435\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443, \u043d\u043e \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u043c. \u0412 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u2013 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439, \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0414\u043b\u044f \u0441\u0435\u0431\u044f \u0436\u0435 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e, \u0447\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0440\u0430\u0432\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \/ \u044f\u0434\u0435\u0440 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u043e\u043c\u0443 \u043d\u0430 \u0434\u0432\u0430.<br \/>  \u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043f\u043e\u0434 \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0431\u044b\u043b\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043e \u0435\u0449\u0435 \u0434\u0432\u0430: \u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439. \u0421\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u2014 \u0441\u043b\u0443\u0448\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u043e\u043a\u0435\u0442 \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0434\u0430\u043b\u0435\u0435 \u043e\u043d\u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043a \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u043f\u043e\u0442\u043e\u043a\u0430\u043c. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u2013 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0436\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u0435\u0433\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0435\u043d\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u2013 \u044d\u0442\u043e \u0432 \u043a\u0430\u043a\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0438 \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 epoll\u2019\u0430. \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u2013 \u044d\u0442\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0432\u0441\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 epoll\u2019\u043e\u043c, \u0430 \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 (\u0440\u0430\u0431\u043e\u0447\u0438\u0445), \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0438\u0445 \u0442\u0443\u0434\u0430 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0422.\u0435. \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043d\u0430 \u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0435\u043c \u0441\u043e\u043a\u0435\u0442\u0435, \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u041f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u043e\u0431\u044b\u0442\u0438\u0435, \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u043e\u0441\u0438\u0433\u043d\u0430\u043b\u0438\u043b \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u043f\u043e\u0442\u043e\u043a\u0430\u043c, \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0438 accept \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438 \u0432 \u043f\u0443\u043b \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0445 \u0441\u043e\u043a\u0435\u0442\u043e\u0432 \u0432 epoll, read, write \u0438 close \u0434\u043b\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043a\u0430 \u0438\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u0441\u043a\u0430\u0436\u0435\u043c \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0441\u043e\u043a\u0435\u0442\u0430, \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u043e\u043a\u0435\u0442 \u0443\u0436\u0435 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043e \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043e\u043a\u0435\u0442\u0430. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u043d\u043e \u0432\u043e\u0442 \u0434\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u043e\u0447\u0438\u0441\u0442\u043a\u0435 \u0432\u0441\u0435\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\u043c, \u0434\u0435\u043b\u043e \u0434\u043e\u0439\u0434\u0435\u0442 \u043d\u0435 \u0441\u0440\u0430\u0437\u0443, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u041c\u043d\u043e\u0433\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044e \u0441\u043e\u043a\u0435\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0435\u0440\u044f\u043b\u0438\u0441\u044c \u0432 \u043c\u043e\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0430\u0441\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0441\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u043e\u0441\u043b\u043e \u0438 \u043f\u0440\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0431\u044b\u043b\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u044f. \u041f\u0430\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u043f\u043e \u0438\u043d\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435. \u0421 \u043a\u0430\u0436\u0434\u044b\u043c \u0441\u043e\u043a\u0435\u0442\u043e\u043c \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 epoll-\u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0435\u0441\u0441\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u043b \u0437\u0430 \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c, \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435 \u0437\u0430\u043a\u0440\u043e\u0435\u0442\u0441\u044f. \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0430\u0441\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b \u0443\u0434\u0430\u043b\u0435\u043d (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438 \u0441\u0435\u0441\u0441\u0438\u0438 \u043d\u0435 \u043f\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044e \u0438\u0437\u0432\u043d\u0435, \u0430 \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u0441\u0430\u043c\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0435), \u0430 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0431\u044b\u043b\u043e \u0435\u0449\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u043a\u0443 \u0441 \u0443\u0436\u0435 \u0431\u0438\u0442\u044b\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c. \u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a\u043e\u0439 \u043e\u043f\u044b\u0442 \u00ab\u043d\u0430 \u0433\u0440\u0430\u0431\u043b\u044f\u0445\u00bb \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0435\u0439 \u0438\u0434\u0435\u0438, \u0431\u044b\u043b\u0430 \u043f\u0440\u0438\u043d\u044f\u0442\u0430 \u0438\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f: \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c epoll\u2019\u0430 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u043a\u0435\u0442\u0430, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0438, \u0435\u0441\u043b\u0438 \u0438\u0445 \u0447\u0438\u0441\u043b\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0434\u043b\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f, \u0442\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0438\u0445, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438; \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442 \u044d\u0442\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442 \u044d\u0442\u043e\u0442 \u0441\u043e\u043a\u0435\u0442 \u0443\u0436\u0435 \u0432 \u0441\u0432\u043e\u0439 epoll \u043d\u0430\u0431\u043e\u0440, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u044e\u0442. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u043c epoll\u2019\u0430 \u0438 \u0432\u0441\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430: \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 epoll, \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c, \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 (\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 epoll\u2019\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044f). \u041a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0430\u043a\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u2013 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0432 \u044d\u0442\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0438\u0448\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a, \u0430 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439, \u0438\u0437 \u043d\u0435\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438. \u041e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u043c\u0435\u043d\u044c\u0448\u0435. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442-\u0441\u0435\u0441\u0441\u0438\u044e \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b epoll\u2019\u0430. \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432; \u043a\u043b\u044e\u0447 \u2013 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c \u0441\u043e\u043a\u0435\u0442\u0430, \u0434\u0430\u043d\u043d\u044b\u0435 \u2013 \u043e\u0431\u044a\u0435\u043a\u0442-\u0441\u0435\u0441\u0441\u0438\u044f. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0441\u0435\u0441\u0441\u0438\u044f\u043c\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u043e\u0431\u044b\u0442\u0438\u044f epoll, \u043d\u043e \u0438 \u043a\u043e\u0433\u0434\u0430 \u043f\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435 \u043d\u0430\u0434\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443 (\u043f\u0443\u043b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d).<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0438 \u0432 \u0441\u0442\u0438\u043b\u0435 C# \/ Java \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 (\u0431\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f) \u0443 \u043c\u0435\u043d\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u043e\u043b\u0435\u0435 1800 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430. \u041c\u043d\u043e\u0433\u043e\u0432\u0430\u0442\u043e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043c\u0435\u043d\u043d\u043e HTTP \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430, \u0441\u0430\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 GET\/HEAD \u0431\u0435\u0437 \u0447\u0435\u0433\u043e \u043b\u0438\u0431\u043e \u0435\u0449\u0435 \u0438 \u0441 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 HTTP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430. \u041d\u0435 \u0432 \u044d\u0442\u043e\u043c \u0441\u0443\u0442\u044c. \u041e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c \u0435\u0449\u0435 \u0440\u0430\u0437, \u0447\u0442\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0432\u0441\u0435\u0433\u043e-\u043b\u0438\u0448\u044c \u00ab\u043f\u0438\u043d\u043a\u043e\u043c\u00bb \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f HTTP-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0441\u0435\u0441\u0441\u0438\u044f\u043c\u0438 (\u043f\u043e\u0434 \u0441\u0435\u0441\u0441\u0438\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\u043c).<br \/>  \u0420\u0430\u0437\u0431\u0438\u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043d\u0441\u0442\u0440\u0443\u043e\u0437\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0438 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u043f\u0440\u0438\u0447\u0435\u0441\u0430\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u0432\u043e\u0442 \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:  <\/p>\n<pre><code class=\"cpp\">class TCPServer   : private Common::NonCopyable { public:   TCPServer(InetAddress const &locAddr, int backlog, int maxThreadsCount,             int maxConnectionsCount, UserSessionCreator sessionCreator);    private:   typedef std::tr1::shared_ptr&lt;Common::IDisposable&gt; IDisposablePtr;   typedef std::vector&lt;IDisposablePtr&gt; IDisposablePool;   Private::ClientItemQueuePtr AcceptedItems;   IDisposablePool Threads; }; <\/code><\/pre>\n<p>  \u042d\u0442\u043e, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0441\u0430\u043c\u0430\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c. \u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432: \u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0445, \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0445 \u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u0435\u043c. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">TCPServer::TCPServer(InetAddress const &locAddr, int backlog, int maxThreadsCount,           int maxConnectionsCount, UserSessionCreator sessionCreator)   : AcceptedItems(new Private::ClientItemQueue(backlog)) {   int EventsCount = maxConnectionsCount \/ maxThreadsCount;   for (int i = 0 ; i &lt; maxThreadsCount ; ++i)   {     Threads.push_back(IDisposablePtr(new Private::WorkerThread(         EventsCount + (i &lt;= maxThreadsCount - 1 ? 0 : maxConnectionsCount % maxThreadsCount),         AcceptedItems       )));   }   Threads.push_back(IDisposablePtr(new Private::ListenThread(locAddr, backlog, AcceptedItems, sessionCreator))); } <\/code><\/pre>\n<\/div>\n<\/div>\n<p> \u0442\u043e\u0436\u0435 \u043d\u0435 \u0432\u0435\u043b\u0438\u043a\u0430. \u041e\u0431\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u043a\u0430\u043a <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class ListenThread   : private TCPServerSocket   , public Common::IDisposable { public:   ListenThread(InetAddress const &locAddr, int backlog,                ClientItemQueuePtr acceptedClients,                UserSessionCreator sessionCreator)     : TCPServerSocket(locAddr, backlog)     , AcceptedClients(acceptedClients)     , SessionCreator(sessionCreator)     , Selector(1, WaitTimeout, std::tr1::bind(&ListenThread::OnSelect,         this, std::tr1::placeholders::_1, std::tr1::placeholders::_2))   {     Selector.AddSocket(GetHandle(), Network::ISelector::stRead);   }    private:   enum { WaitTimeout = 100 };   ClientItemQueuePtr AcceptedClients;   UserSessionCreator SessionCreator;   SelectorThread Selector;      void OnSelect(SocketHandle handle, Network::ISelector::SelectType selectType)   {     \/\/\u041f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430-\u0441\u0435\u0441\u0441\u0438\u0438 \u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c   } }; <\/code><\/pre>\n<\/div>\n<\/div>\n<p>, \u0442\u0430\u043a \u0438 <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class WorkerThread   : private Common::NonCopyable   , public Common::IDisposable { public:   WorkerThread(int maxEventsCount, ClientItemQueuePtr acceptedClients)     : MaxConnections(maxEventsCount)     , AcceptedClients(acceptedClients)     , Selector(maxEventsCount, WaitTimeout, std::tr1::bind(&WorkerThread::OnSelect,           this, std::tr1::placeholders::_1, std::tr1::placeholders::_2),         SelectorThread::ThreadFunctionPtr(new SelectorThread::ThreadFunction(std::tr1::bind(           &WorkerThread::OnIdle, this))))   {   }    private:   enum { WaitTimeout = 100 };      typedef std::map&lt;SocketHandle, ClientItemPtr&gt; ClientPool;   unsigned MaxConnections;   ClientItemQueuePtr AcceptedClients;   ClientPool Clients;   SelectorThread Selector;      void OnSelect(SocketHandle handle, Network::ISelector::SelectType selectType)   {     \/\/\u0420\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043d\u0430 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0445 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044f\u0445 \u0441\u043e\u043a\u0435\u0442\u043e\u0432 (\u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430, \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u043e\u043a\u0435\u0442\u043e\u0432)   }      void OnIdle()   {     \/\/\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u0435\u0441\u0441\u0438\u0439. \u0412\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432-\u0441\u0435\u0441\u0441\u0438\u0439 \u0432 epoll.   } };<\/code><\/pre>\n<\/div>\n<\/div>\n<p> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043f\u043e\u0442\u043e\u043a\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">SelectorThread<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class SelectorThread   : private EPollSelector   , private System::ThreadLoop { public:      using EPollSelector::AddSocket;      typedef System::Thread::ThreadFunction ThreadFunction;   typedef std::tr1::shared_ptr&lt;ThreadFunction&gt; ThreadFunctionPtr;      SelectorThread(int maxEventsCount, unsigned waitTimeout, ISelector::SelectFunction onSelectFunc,                  ThreadFunctionPtr idleFunc = ThreadFunctionPtr());   virtual ~SelectorThread();    private:   void SelectItems(ISelector::SelectFunction &func, unsigned waitTimeout, ThreadFunctionPtr idleFunc); };<\/code><\/pre>\n<\/div>\n<\/div>\n<p>. \u042d\u0442\u043e\u0442 \u043f\u043e\u0442\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">EPollSelector<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class EPollSelector   : private Common::NonCopyable   , public ISelector { public:   EPollSelector(int maxSocketCount);   ~EPollSelector();   virtual void AddSocket(SocketHandle handle, int selectType);   virtual void Select(SelectFunction *function, unsigned timeout);    private:   typedef std::vector&lt;epoll_event&gt; EventPool;   EventPool Events;   int EPoll;      static int GetSelectFlags(int selectType); };<\/code><\/pre>\n<\/div>\n<\/div>\n<p> \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0430\u043a\u0446\u0438\u0439 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043d\u0430 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044f\u0445 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439.<br \/>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0442\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0441\u0435\u0441\u0441\u0438\u0439. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u2014 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 <\/p>\n<pre><code class=\"cpp\">struct IUserSession {   virtual ~IUserSession() {}   virtual void Init(IConnectionCtrl *ctrl) = 0;   virtual void Done() = 0;   virtual unsigned GetMaxBufSizeForRead() const = 0;   virtual bool IsExpiredSession(std::time_t lastActionTime) const = 0;   virtual void OnRecvData(void const *buf, unsigned bytes) = 0;   virtual void OnIdle() = 0; }; <\/code><\/pre>\n<p> \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b. \u041c\u0435\u0442\u043e\u0434\u044b Init \u0438 Done \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0438 \u043f\u0440\u0438 \u0435\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. GetMaxBufSizeForRead \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432 OnRecvData. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u0435\u0441\u0441\u0438\u044f \u043c\u043e\u0433\u043b\u0430 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0438\u0441\u0442\u0435\u043a\u043b\u0430 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043d\u0430\u0434\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c IsExpiredSession \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. OnIdle \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0430\u0445 \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u043a\u0438\u043c\u0438-\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438, \u0442\u0443\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <\/p>\n<pre><code class=\"cpp\">struct IConnectionCtrl {   virtual ~IConnectionCtrl() { }   virtual void MarkMeForClose() = 0;   virtual void UpdateSessionTime() = 0;   virtual bool SendData(void const *buf, unsigned *bytes) = 0;   virtual bool SendFile(int fileHandle, unsigned offset, unsigned *bytes) = 0;   virtual InetAddress const& GetAddress() const = 0;   virtual SocketTuner GetSocketTuner() const = 0; }; <\/code><\/pre>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 IConnectionCtrl \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u043c\u043e\u0433\u043b\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u0435\u0442\u044c (\u043c\u0435\u0442\u043e\u0434\u044b SendData \u0438 SendFile), \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f (\u043c\u0435\u0442\u043e\u0434 MarkMeForClose), \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0442\u043e\u043c \u0447\u0442\u043e \u00ab\u043e\u043d\u0430 \u0436\u0438\u0432\u0430\u00bb (\u043c\u0435\u0442\u043e\u0434 UpdateSessionTime; \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 IsExpiredSession), \u0442\u0430\u043a \u0436\u0435 \u0441\u0435\u0441\u0441\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (\u043c\u0435\u0442\u043e\u0434 GetAddress) \u0438 \u043e\u0431\u044a\u0435\u043a\u0442 SocketTuner \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0441\u043e\u043a\u0435\u0442\u0430 \u2014 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (\u043c\u0435\u0442\u043e\u0434 GetSocketTuner).<br \/>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f HTTP-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 HttpUserSession. \u041a\u0430\u043a \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0432\u044b\u0448\u0435, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f HTTP \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0430 \u043d\u0435 \u0441\u0430\u043c\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0434 \u043d\u0435\u0439 \u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u0434\u0443\u043c\u0430\u043b; \u0434\u0443\u043c\u0430\u043b \u0440\u043e\u0432\u043d\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \ud83d\ude42<\/p>\n<h4>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 libevent<\/h4>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 libevent \u043f\u043e\u043a\u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0444\u0430\u0432\u043e\u0440\u0438\u0442. \u042d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434 \u0438 \u0441\u043a\u0440\u044b\u0442\u044c \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043c\u043d\u043e\u0433\u0438\u0435 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0441\u044b\u0440\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0432\u0435\u0448\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435. \u041a\u0440\u043e\u043c\u0435 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0435\u0441\u0442\u044c \u0438 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b. libevent \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 HTTP-\u0441\u0435\u0440\u0432\u0435\u0440, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u0445 \u0436\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043e\u0442\u0432\u0435\u0442\u043e\u0432. \u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c RPC \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<br \/>  \u0415\u0441\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c HTTP-\u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e, \u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439:  <\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432\u044b\u0437\u043e\u0432\u043e\u043c event_base_new (\u0435\u0441\u0442\u044c \u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u2014 event_init). \u041f\u0430\u0440\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u2014 event_base_free.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 HTTP-\u0434\u0432\u0438\u0436\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u043c evhttp_new. \u041f\u0430\u0440\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 evhttp_free.<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e evhttp_set_allowed_methods \u0441 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0435\u0439 \u0444\u043b\u0430\u0433\u043e\u0432. \u0422\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434\u0430 GET \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a: evhttp_set_allowed_methods(Http, EVHTTP_REQ_GET), \u0433\u0434\u0435 Http \u2014 \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 (2).<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 evhttp_set_gencb.<\/li>\n<li>\u0421\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u0441\u043e\u043a\u0435\u0442 \u0441 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 evhttp_accept_socket. \u0421\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u0441\u043e\u043a\u0435\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0435 \u0442\u0435 \u0436\u0435 socket\/bind\/listen.<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0446\u0438\u043a\u043b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 event_base_loop. \u0415\u0441\u0442\u044c \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 event_base_dispatch. event_base_loop \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u0446\u0438\u043a\u043b\u0435. \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u0432 \u043d\u0435\u0434\u0440\u0430\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043e\u0442\u043a\u0443\u0434\u0430 \u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432\u044b\u0437\u043e\u0432\u044b \u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430, \u043b\u0438\u0431\u043e \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0447\u0435\u0433\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u043c\u043e\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u0441\u0430\u043c\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c; \u0442\u0430\u043a \u0436\u0435 \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0436\u0438\u0437\u043d\u0438 \u0446\u0438\u043a\u043b\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.<\/li>\n<li>\u0412 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 evbuffer_add_printf \u0438\u043b\u0438 \u043e\u0442\u0434\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u0443\u0441\u0442\u044c \u043e\u043d\u0430 \u0441\u0430\u043c\u0430 \u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442, \u0432\u044b\u0437\u0432\u0430\u0432 evbuffer_add_file. \u0414\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0431\u0443\u0444\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e (\u0438 \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c) \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430: evhttp_request::output_buffer. \u0412\u0441\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b, \u0442.\u0435. \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 \u043f\u043e\u0441\u044b\u043b\u043a\u043e\u0439 \u0444\u0430\u0439\u043b\u0430, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0432\u0441\u0435 \u0442\u043e\u0439 \u0436\u0435 evbuffer_add_file \u0438 \u043e\u043d\u0430 \u0432\u0435\u0440\u043d\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0430 \u043f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u0441\u0430\u043c\u0430 \u0438 \u0437\u0430\u043a\u0440\u043e\u0435\u0442 \u0444\u0430\u0439\u043b.<\/li>\n<\/ol>\n<p>  \u0412\u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u043d\u043e, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c boost::thread \u0438\u043b\u0438 \u0441\u0432\u043e\u0439 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e\u0442\u043e\u043a\u0430, \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a libevent \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430. \u0412 \u0441\u0432\u043e\u0435\u0439 \u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044f \u0432\u043e\u0437\u044c\u043c\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u0431\u0435\u0440\u0442\u043a\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0434 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0434\u043b\u044f Linux. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0432\u0430\u0436\u043d\u043e.<br \/>  \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0438, \u0442.\u0435. \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0448\u0430\u0433\u0438 1-5. \u0420\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0446\u0438\u043a\u043b\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u2013 \u0448\u0430\u0433 6. \u0428\u0430\u0433 7 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u0435. \u041e\u0431\u043e\u0431\u0449\u0430\u044f, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u0441\u043e\u043a\u0435\u0442 \u0438 \u043d\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u043f\u043e\u0442\u043e\u043a\u0430\u043c.<br \/>  \u0422\u0430\u043a \u0432 \u0441\u0432\u043e\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f HTTP-\u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e GET \u043c\u0435\u0442\u043e\u0434\u0430 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u043a\u043e\u043b\u043e 200 \u0441\u0442\u0440\u043e\u043a \u0432 \u0441\u0442\u0438\u043b\u0435 C#\/Java. \u0422\u0430\u043a\u043e\u0435 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043a\u043e\u0434\u0430 \u0441 \u043d\u0430\u043b\u0438\u0447\u0438\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0440\u0430\u0434\u043e\u0432\u0430\u0442\u044c. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0443\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0442\u0435\u0441\u0442\u044b \u0432 \u043a\u043e\u043d\u0446\u0435\u2026  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430 libevent<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &lt;event.h&gt; #include &lt;evhttp.h&gt;  #include &lt;unistd.h&gt; #include &lt;string.h&gt; #include &lt;signal.h&gt;  #include &lt;vector&gt; #include &lt;iostream&gt;  #include &lt;tr1\/functional&gt; #include &lt;tr1\/memory&gt;  #include &quot;tcp_server_socket.h&quot; #include &quot;inet_address_v4.h&quot; #include &quot;thread.h&quot; #include &quot;command_line.h&quot; #include &quot;logger.h&quot; #include &quot;file_holder.h&quot;  namespace Network {      namespace Private   {          DECLARE_RUNTIME_EXCEPTION(EventBaseHolder)          class EventBaseHolder       : private Common::NonCopyable     {     public:       EventBaseHolder()         : EventBase(event_base_new())       {         if (!EventBase)           throw EventBaseHolderException(&quot;Failed to create new event_base&quot;);       }       ~EventBaseHolder()       {         event_base_free(EventBase);       }       event_base* GetBase() const       {         return EventBase;       }            private:       event_base *EventBase;     };          DECLARE_RUNTIME_EXCEPTION(HttpEventHolder)                                    class HttpEventHolder       : public EventBaseHolder     {     public:       typedef std::tr1::function&lt;void (char const *, evbuffer *)&gt; RequestHandler;       HttpEventHolder(SocketHandle sock, RequestHandler const &handler)         : Handler(handler)         , Http(evhttp_new(GetBase()))       {         evhttp_set_allowed_methods(Http, EVHTTP_REQ_GET);         evhttp_set_gencb(Http, &HttpEventHolder::RawHttpRequestHandler, this);                 if (evhttp_accept_socket(Http, sock) == -1)           throw HttpEventHolderException(&quot;Failed to accept socket for http&quot;);       }       ~HttpEventHolder()       {         evhttp_free(Http);       }            private:       RequestHandler Handler;       evhttp *Http;              static void RawHttpRequestHandler(evhttp_request *request, void *prm)       {         reinterpret_cast&lt;HttpEventHolder *&gt;(prm)-&gt;ProcessRequest(request);       }              void ProcessRequest(evhttp_request *request)       {         try         {           Handler(request-&gt;uri, request-&gt;output_buffer);           evhttp_send_reply(request, HTTP_OK, &quot;OK&quot;, request-&gt;output_buffer);         }         catch (std::exception const &e)         {           evhttp_send_reply(request, HTTP_INTERNAL,                             e.what() ? e.what() : &quot;Internal server error.&quot;,                             request-&gt;output_buffer);         }       }     };          class ServerThread       : private HttpEventHolder       , private System::Thread     {     public:       ServerThread(SocketHandle sock, std::string const &rootDir, std::string const &defaultPage)         : HttpEventHolder(sock, std::tr1::bind(&ServerThread::OnRequest, this,                                                std::tr1::placeholders::_1,                                                std::tr1::placeholders::_2))         , Thread(std::tr1::bind(&ServerThread::DispatchProc, this))         , RootDir(rootDir)         , DefaultPage(defaultPage)       {       }       ~ServerThread()       {         IsRun = false;       }            private:       enum { WaitTimeout = 10000 };              bool volatile IsRun;       std::string RootDir;       std::string DefaultPage;              void DispatchProc()       {         IsRun = true;         while(IsRun)         {           if (event_base_loop(GetBase(), EVLOOP_NONBLOCK))           {             Common::Log::GetLogInst() &lt;&lt; &quot;Failed to run dispatch events&quot;;             break;           }           usleep(WaitTimeout);         }       }              void OnRequest(char const *resource, evbuffer *outBuffer)       {         std::string FileName;         GetFullFileName(resource, &FileName);         try         {           System::FileHolder File(FileName);           if (!File.GetSize())           {             evbuffer_add_printf(outBuffer, &quot;Empty file&quot;);             return;           }           evbuffer_add_file(outBuffer, File.GetHandle(), 0, File.GetSize());           File.Detach();         }         catch (System::FileHolderException const &)         {           evbuffer_add_printf(outBuffer, &quot;File not found&quot;);         }       }              void GetFullFileName(char const *resource, std::string *fileName) const       {         fileName-&gt;append(RootDir);         if (!resource || !strcmp(resource, &quot;\/&quot;))         {           fileName-&gt;append(&quot;\/&quot;);           fileName-&gt;append(DefaultPage);         }         else         {           fileName-&gt;append(resource);         }       }     };        }      class HTTPServer     : private TCPServerSocket   {   public:     HTTPServer(InetAddress const &locAddr, int backlog,               int maxThreadsCount,               std::string const &rootDir, std::string const &defaultPage)       : TCPServerSocket(locAddr, backlog)     {       for (int i = 0 ; i &lt; maxThreadsCount ; ++i)       {         ServerThreads.push_back(ServerThreadPtr(new Private::ServerThread(GetHandle(),           rootDir, defaultPage)));       }     }        private:     typedef std::tr1::shared_ptr&lt;Private::ServerThread&gt; ServerThreadPtr;     typedef std::vector&lt;ServerThreadPtr&gt; ServerThreadPool;     ServerThreadPool ServerThreads;   };    }  int main(int argc, char const **argv) {   if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)   {     std::cerr &lt;&lt; &quot;Failed to call signal(SIGPIPE, SIG_IGN)&quot; &lt;&lt; std::endl;     return 0;   }   try   {     char const ServerAddr[] = &quot;Server&quot;;     char const ServerPort[] = &quot;Port&quot;;     char const MaxBacklog[] = &quot;Backlog&quot;;     char const ThreadsCount[] = &quot;Threads&quot;;     char const RootDir[] = &quot;Root&quot;;     char const DefaultPage[] = &quot;DefaultPage&quot;;          \/\/ Server:127.0.0.1 Port:5555 Backlog:10 Threads:4 Root:.\/ DefaultPage:index.html     Common::CommandLine CmdLine(argc, argv);              Network::HTTPServer Srv(         Network::InetAddressV4::CreateFromString(           CmdLine.GetStrParameter(ServerAddr),           CmdLine.GetParameter&lt;unsigned short&gt;(ServerPort)),         CmdLine.GetParameter&lt;unsigned&gt;(MaxBacklog),         CmdLine.GetParameter&lt;unsigned&gt;(ThreadsCount),         CmdLine.GetStrParameter(RootDir),         CmdLine.GetStrParameter(DefaultPage)       );     std::cin.get();   }   catch (std::exception const &e)   {     Common::Log::GetLogInst() &lt;&lt; e.what();   }   return 0; } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h4>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 boost.asio<\/h4>\n<p>  boost.asio \u2014 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c boost&#8217;\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043c\u043d\u043e\u0433\u043e \u0440\u0443\u0442\u0438\u043d\u044b.<br \/>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430 boost \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u043f\u0438\u0441\u0430\u0442\u044c. \u0412\u0437\u044f\u043b \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043a boost.asio. <b>\u041f\u0440\u0438\u043c\u0435\u0440 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0433\u043e HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430.<a href=\"http:\/\/www.boost.org\/doc\/libs\/1_51_0\/doc\/html\/boost_asio\/examples.html#boost_asio.examples.http_server_3\">HTTP Server 3<\/a><\/b> \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c\u0438 \u0432\u044b\u0448\u0435.<br \/>  \u0415\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u043d\u0435 \u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431 \u043e\u0431\u0449\u0438\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u0445\u2026 \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 libevent \u0432 boost.asio \u043d\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u043d\u0430 \u043f\u043e\u0434\u043e\u0431\u0438\u0438\u0438 HTTP \u0438 \u0434\u0440\u0443\u0433\u0438\u0445. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043a\u0440\u043e\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0441\u0435\u0442\u044c\u044e \u043f\u043e TCP \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0430 \u0432\u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e HTTP \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0441\u0430\u043c\u043e\u043c\u0443: \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430.<br \/>  \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u044d\u0445\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \/ \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 HTTP \u0432 \u0441\u0432\u0435\u0442\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u044b \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0448\u0430\u0433\u043e\u0432 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c boost.asio \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0430\u044f:  <\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 boost::asio::io_service \u0438 boost::asio::ip::tcp::acceptor.<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f boost::asio::ip::tcp::resolver \u0438 boost::asio::ip::tcp::endpoint \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u043a\u0435\u0442\u0430 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439.<\/li>\n<li>\u0412\u044b\u0437\u0432\u0430\u0442\u044c bind \u0438 listen \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 boost::asio::ip::tcp::acceptor.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u00ab\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\u00bb; \u043e\u043d \u0436\u0435 \u00ab\u0421\u0435\u0441\u0441\u0438\u044f\u00bb, \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043f\u0440\u0438\u0435\u043c\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/li>\n<li>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439, \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0446\u0438\u043a\u043b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432\u044b\u0437\u043e\u0432\u043e\u043c boost::asio::io_service::run.<\/li>\n<\/ol>\n<p>  \u0418 \u043a\u0430\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u043d\u0430 libevent \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0437 \u043e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043d\u0430\u0431\u043e\u0440 \u0448\u0430\u0433\u043e\u0432. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0438 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 boost::asio::io_service::run \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0434\u043b\u044f \u0432 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u044d\u0445\u043e-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430 boost.asio<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &lt;boost\/noncopyable.hpp&gt; #include &lt;boost\/asio.hpp&gt; #include &lt;boost\/shared_ptr.hpp&gt; #include &lt;boost\/thread.hpp&gt; #include &lt;boost\/make_shared.hpp&gt; #include &lt;boost\/bind.hpp&gt; #include &lt;boost\/enable_shared_from_this.hpp&gt; #include &lt;boost\/array.hpp&gt;  namespace Network {      namespace Private   {          class Connection         : private boost::noncopyable         , public boost::enable_shared_from_this&lt;Connection&gt;     {     public:       Connection(boost::asio::io_service &ioService)         : Strand(ioService)         , Socket(ioService)       {       }       boost::asio::ip::tcp::socket& GetSocket()       {         return Socket;       }       void Start()       {         Socket.async_read_some(boost::asio::buffer(Buffer),                                Strand.wrap(                                  boost::bind(&Connection::HandleRead, shared_from_this(),                                              boost::asio::placeholders::error,                                              boost::asio::placeholders::bytes_transferred)                                  ));       }       void HandleRead(boost::system::error_code const &error, std::size_t bytes)       {         if (error)           return;                  std::vector&lt;boost::asio::const_buffer&gt; Buffers;         Buffers.push_back(boost::asio::const_buffer(Buffer.data(), bytes));         boost::asio::async_write(Socket, Buffers,                                  Strand.wrap(                                    boost::bind(&Connection::HandleWrite, shared_from_this(),                                                boost::asio::placeholders::error)                                    ));       }       void HandleWrite(boost::system::error_code const &error)       {         if (error)           return;                  boost::system::error_code Code;         Socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, Code);       }            private:       boost::array&lt;char, 4096&gt; Buffer;       boost::asio::io_service::strand Strand;       boost::asio::ip::tcp::socket Socket;     };        }      class EchoServer       : private boost::noncopyable   {   public:     EchoServer(std::string const& locAddr, std::string const& port, unsigned threadsCount)       : Acceptor(IoService)       , Threads(threadsCount)     {       boost::asio::ip::tcp::resolver Resolver(IoService);       boost::asio::ip::tcp::resolver::query Query(locAddr, port);       boost::asio::ip::tcp::endpoint Endpoint = *Resolver.resolve(Query);       Acceptor.open(Endpoint.protocol());       Acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));       Acceptor.bind(Endpoint);       Acceptor.listen();              StartAccept();              std::generate(Threads.begin(), Threads.end(),                     boost::bind(                       &boost::make_shared&lt;boost::thread, boost::function&lt;void ()&gt; const &&gt;,                       boost::function&lt;void ()&gt;(boost::bind(&boost::asio::io_service::run, &IoService))                       ));     }     ~EchoServer()     {       std::for_each(Threads.begin(), Threads.end(),                     boost::bind(&boost::asio::io_service::stop, &IoService));       std::for_each(Threads.begin(), Threads.end(),                     boost::bind(&boost::thread::join, _1));     }        private:     boost::asio::io_service IoService;     boost::asio::ip::tcp::acceptor Acceptor;          typedef boost::shared_ptr&lt;Private::Connection&gt; ConnectionPtr;          ConnectionPtr NewConnection;          typedef boost::shared_ptr&lt;boost::thread&gt; ThreadPtr;     typedef std::vector&lt;ThreadPtr&gt; ThreadPool;          ThreadPool Threads;          void StartAccept()     {       NewConnection = boost::make_shared&lt;Private::Connection, boost::asio::io_service &&gt;(IoService);       Acceptor.async_accept(NewConnection-&gt;GetSocket(),                             boost::bind(&EchoServer::HandleAccept, this,                                         boost::asio::placeholders::error));     }     void HandleAccept(boost::system::error_code const &error)     {       if (!error)         NewConnection-&gt;Start();       StartAccept();     }   };    }  int main() {   try   {     Network::EchoServer Srv(&quot;127.0.0.1&quot;, &quot;5555&quot;, 4);     std::cin.get();   }   catch (std::exception const &e)   {     std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;   }   return 0; } <\/code><\/pre>\n<\/div>\n<\/div>\n<h4>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h4>\n<p>  \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u0435\u043b\u043a\u0438\u2026<br \/>  \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043d\u043e\u0443\u0442\u0431\u0443\u043a \u0441 4\u0413\u0431 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 2\u0445 \u044f\u0434\u0435\u0440\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c Ubuntu 12.04 desktop.<br \/>  \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0441\u0442\u0430\u0432\u043b\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"bash\">sudo apt-get install apache2-utils <\/code><\/pre>\n<p> \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e\u0435 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: <\/p>\n<pre><code class=\"bash\">ab -c 100 -k -r -t 5 &quot;http:\/\/127.0.0.1:5555\/test.jpg&quot;<\/code><\/pre>\n<p> \u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0431\u044b\u043b\u043e \u0437\u0430\u0434\u0430\u043d\u043e \u043f\u043e 4 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u0430, 100 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439, \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 2496629 \u0431\u0430\u0439\u0442 \u0438 \u043e\u0446\u0435\u043d\u043e\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 5 \u0441\u0435\u043a\u0443\u043d\u0434.<br \/>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 epoll<\/b><\/p>\n<div class=\"spoiler_text\">Benchmarking 127.0.0.1 (be patient)<br \/>  Finished 2150 requests<\/p>\n<p>  Server Software: MyTestHttpServer<br \/>  Server Hostname: 127.0.0.1<br \/>  Server Port: 5555<\/p>\n<p>  Document Path: \/test.jpg<br \/>  Document Length: 2496629 bytes<\/p>\n<p>  Concurrency Level: 100<br \/>  Time taken for tests: 5.017 seconds<br \/>  Complete requests: 2150<br \/>  Failed requests: 0<br \/>  Write errors: 0<br \/>  Keep-Alive requests: 0<br \/>  Total transferred: 5389312814 bytes<br \/>  HTML transferred: 5388981758 bytes<br \/>  Requests per second: 428.54 [#\/sec] (mean)<br \/>  Time per request: 233.348 [ms] (mean)<br \/>  Time per request: 2.333 [ms] (mean, across all concurrent requests)<br \/>  Transfer rate: 1049037.42 [Kbytes\/sec] received<\/p>\n<p>  Connection Times (ms)<br \/>   min mean[\u00b1sd] median max<br \/>  Connect: 0 0 0.5 0 3<br \/>  Processing: 74 226 58.2 229 364<br \/>  Waiting: 2 133 64.8 141 264<br \/>  Total: 77 226 58.1 229 364  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 libevent<\/b><\/p>\n<div class=\"spoiler_text\">Benchmarking 127.0.0.1 (be patient)<br \/>  Finished 1653 requests<\/p>\n<p>  Server Software: <br \/>  Server Hostname: 127.0.0.1<br \/>  Server Port: 5555<\/p>\n<p>  Document Path: \/test.jpg<br \/>  Document Length: 2496629 bytes<\/p>\n<p>  Concurrency Level: 100<br \/>  Time taken for tests: 5.008 seconds<br \/>  Complete requests: 1653<br \/>  Failed requests: 0<br \/>  Write errors: 0<br \/>  Keep-Alive requests: 1653<br \/>  Total transferred: 4263404830 bytes<br \/>  HTML transferred: 4263207306 bytes<br \/>  Requests per second: 330.05 [#\/sec] (mean)<br \/>  Time per request: 302.987 [ms] (mean)<br \/>  Time per request: 3.030 [ms] (mean, across all concurrent requests)<br \/>  Transfer rate: 831304.15 [Kbytes\/sec] received<\/p>\n<p>  Connection Times (ms)<br \/>   min mean[\u00b1sd] median max<br \/>  Connect: 0 53 223.3 0 1000<br \/>  Processing: 3 228 275.5 62 904<br \/>  Waiting: 0 11 42.5 5 639<br \/>  Total: 3 280 417.9 62 1864  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 boost.asio<\/b><\/p>\n<div class=\"spoiler_text\">Benchmarking 127.0.0.1 (be patient)<br \/>  Finished 639 requests<\/p>\n<p>  Server Software: <br \/>  Server Hostname: 127.0.0.1<br \/>  Server Port: 5555<\/p>\n<p>  Document Path: \/test.jpg<br \/>  Document Length: 2496629 bytes<\/p>\n<p>  Concurrency Level: 100<br \/>  Time taken for tests: 5.001 seconds<br \/>  Complete requests: 639<br \/>  Failed requests: 0<br \/>  Write errors: 0<br \/>  Keep-Alive requests: 0<br \/>  Total transferred: 1655047414 bytes<br \/>  HTML transferred: 1654999464 bytes<br \/>  Requests per second: 127.78 [#\/sec] (mean)<br \/>  Time per request: 782.584 [ms] (mean)<br \/>  Time per request: 7.826 [ms] (mean, across all concurrent requests)<br \/>  Transfer rate: 323205.36 [Kbytes\/sec] received<\/p>\n<p>  Connection Times (ms)<br \/>   min mean[\u00b1sd] median max<br \/>  Connect: 0 0 1.1 0 4<br \/>  Processing: 286 724 120.0 689 1106<br \/>  Waiting: 12 364 101.0 394 532<br \/>  Total: 286 724 120.0 689 1106  <\/div>\n<\/div>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0432\u0435\u0434\u0435\u043d\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435  <\/p>\n<table>\n<tr>\n<td><\/td>\n<td><b>epoll<\/b><\/td>\n<td><b>libevent<\/b><\/td>\n<td><b>boost.asio<\/b><\/td>\n<\/tr>\n<tr>\n<td><b>Complete requests<\/b><\/td>\n<td>2150<\/td>\n<td>1653<\/td>\n<td>639<\/td>\n<\/tr>\n<tr>\n<td><b>Total transferred (bytes)<\/b><\/td>\n<td>5389312814<\/td>\n<td>4263404830<\/td>\n<td>1655047414<\/td>\n<\/tr>\n<tr>\n<td><b>HTML transferred (bytes)<\/b><\/td>\n<td>5388981758<\/td>\n<td>4263207306<\/td>\n<td>1654999464<\/td>\n<\/tr>\n<tr>\n<td><b>Requests per second [sec] (mean)<\/b><\/td>\n<td>428.54<\/td>\n<td>330.05<\/td>\n<td>127.78<\/td>\n<\/tr>\n<tr>\n<td><b>Time per request [ms] (mean)<\/b><\/td>\n<td>233.348<\/td>\n<td>302.987<\/td>\n<td>782.584<\/td>\n<\/tr>\n<tr>\n<td><b>Transfer rate [Kbytes\/sec] received<\/b><\/td>\n<td>1049037.42<\/td>\n<td>831304.15<\/td>\n<td>323205.36<\/td>\n<\/tr>\n<\/table>\n<p>  \u0415\u0441\u0442\u044c \u0442\u0440\u0438 \u0432\u0438\u0434\u0430 \u043b\u0436\u0438: \u043b\u043e\u0436\u044c, \u043d\u0430\u0433\u043b\u0430\u044f \u043b\u043e\u0436\u044c \u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430. \u0425\u043e\u0442\u044f, \u043d\u0430\u0434\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u0435\u043d\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0440\u0430\u0434\u043e\u0432\u0430\u0442\u044c. \u0414\u0443\u043c\u0430\u044e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0443\u0434\u0435\u043b\u044f\u0442\u044c \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c, \u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u043d\u0438\u0445 \u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043f\u043e\u0440\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043f\u0440\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u0432\u044b\u0431\u043e\u0440\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u0432\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435, \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u043c\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0441\u0435\u0442\u0438 \u0438 \u0442.\u0434.<br \/>  100 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u2014 \u044d\u0442\u043e \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u043c\u0430\u043b\u043e, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0442\u0430\u043a\u0438\u0445 \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u0430 \u0442\u044b\u0441\u044f\u0447\u0430\u0445 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445, \u043d\u043e \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u0443\u0436\u0435 \u0438\u043d\u044b\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u044b. \u041e\u0434\u0438\u043d \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u2014 \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u0423\u0437\u043d\u0430\u0442\u044c \u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 getrlimit \u0438 setrlimit. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c getrlimit \u0441 \u0444\u043b\u0430\u0433\u043e\u043c RLIMIT_NOFILE \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b rlimit. \u0414\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u2014 \u044d\u0442\u043e 1024 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 4096 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u041f\u043e \u044d\u0442\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0435 \u0440\u0430\u0437\u0433\u043e\u043d\u0438\u0448\u044c\u0441\u044f\u2026 \u041a\u0430\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043c\u043e\u0433 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0415\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <b><a href=\"http:\/\/www.ibm.com\/developerworks\/ru\/library\/l-hisock\/index.html\">\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u043a\u0435\u0442\u0430 \u0432 Linux<\/a><\/b><\/p>\n<h4>\u0412\u044b\u0432\u043e\u0434\u044b \u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u041f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 WebServer \u043d\u0430 \u00ab\u0433\u043e\u043b\u044b\u0445\u00bb \u0441\u043e\u043a\u0435\u0442\u0430\u0445 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043d\u043e \u043d\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u044c\u044f\u0432\u043e\u043b \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u044f\u0445. \u041f\u043e \u043c\u0435\u0440\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u0438 \u0441\u0430\u043c\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u043a\u0430\u043a \u0441\u043d\u0435\u0436\u043d\u044b\u0439 \u043a\u043e\u043c \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0430\u043a\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0438 \u043d\u0430\u043a\u0430\u0442\u044b\u0432\u0430\u044e\u0442. \u041d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043c\u043e\u044e \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u043b\u044e\u0431\u043e\u0432\u044c \u043a \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u044f \u0431\u044b \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e\u0435, \u043f\u043e\u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u043c\u0438-\u0442\u043e \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0447\u0435\u043c-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041a\u043e\u0434, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 epoll \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c. \u0414\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u043e \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u0434\u043e\u0440\u043e\u0433\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043e\u0442\u0434\u0430\u0447\u0430 \u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0442\u043e\u0436\u0435 \u043d\u0435 \u043c\u0430\u043b\u043e\u0439. \u041d\u043e \u00ab\u043d\u0430\u0433\u043b\u0430\u044f \u043b\u043e\u0436\u044c\u00bb, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u0430\u044f \u0432 \u0441\u0432\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u044b\u0448\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0440\u0430\u0434\u043e\u0432\u0430\u0442\u044c, \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 C++, \u0430 \u043d\u0435 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c C, \u043d\u0435 \u0431\u0440\u0435\u0437\u0433\u043e\u0432\u0430\u043b \u0432 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c stl, \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u043f\u0438\u0441\u0430\u043b\u0441\u044f \u043e\u043d \u0431\u0435\u0437 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u0434\u0443\u043c\u044b\u0432\u0430\u043d\u0438\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0448\u0430\u0433\u043e\u0432.<br \/>  \u041a\u0430\u043a \u0443\u0436\u0435 \u0438 \u0431\u044b\u043b\u043e \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e \u0432\u044b\u0448\u0435, \u0444\u0430\u0432\u043e\u0440\u0438\u0442\u043e\u043c \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 libevent, \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u0430 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430, \u0434\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f, \u043c\u043d\u043e\u0433\u043e \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0440\u0443\u0442\u0438\u043d\u044b. \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u044f \u0431\u044b \u0435\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c.<br \/>  \u041f\u043e \u043c\u043e\u0435\u043c\u0443 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e, boost \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u0435\u043d. \u041e\u043d \u0434\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043f\u043b\u044e\u0441\u043e\u0432 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0438 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u0435\u043d. boost.asio \u0434\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043e\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f. \u041e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u043c\u043d\u0435\u043d\u0438\u044f \u00ab\u0431\u044b\u0432\u0430\u043b\u044b\u0445\u00bb \u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0438, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439.<br \/>  \u0415\u0441\u0442\u044c \u0435\u0449\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c <a href=\"http:\/\/www.kernel.org\/doc\/man-pages\/online\/pages\/man7\/aio.7.html\">\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 Linux (aio)<\/a>, \u043d\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 \u0432\u0441\u0435 \u0442\u0435\u0445 \u0436\u0435 \u00ab\u0433\u043e\u043b\u044b\u0445\u00bb \u0441\u043e\u043a\u0435\u0442\u0430\u0445 \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0441 \u0438\u043d\u044b\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438.<\/p>\n<p>  \u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 <a href=\"http:\/\/web-srv-test.googlecode.com\/svn\/trunk\/\">SVN<\/a>. \u041a\u043e\u0434, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c. \u041d\u043e! \u041e\u0431\u043e\u0441\u0442\u0440\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u043f\u0435\u0440\u0444\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0437\u043c \u043c\u043e\u0436\u0435\u0442 \u0438\u043b\u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0442\u044f\u043d\u0443\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0447\u0435\u0433\u043e \u043b\u0438\u0431\u043e, \u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u043e\u0439. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0442\u0430\u0442\u044c\u0435 <b><a href=\"http:\/\/habrahabr.ru\/post\/155959\/\">\u00ab\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0440\u0430\u0434\u0430\u043d\u0438\u0435\u00bb<\/a><\/b>, \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0432\u0442\u043e\u0440\u043e\u0435 \u2014 \u0431\u044b\u043b\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u0442\u0440\u0435\u0442\u044c\u0435 \u2014 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0431\u044b\u0441\u0442\u0440\u043e. \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0448\u0435\u043b \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0430\u0434\u0438\u044e \u0438 \u043f\u043e\u043d\u0435\u043c\u043d\u043e\u0433\u0443 \u0437\u0430\u0434\u0435\u043b \u0432\u0442\u043e\u0440\u0443\u044e \u0438 \u0442\u0440\u0435\u0442\u044c\u044e \ud83d\ude42<\/p>\n<p>  \u0422\u0430\u043a \u00ab\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435\u00bb \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u043b\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0441\u0442\u0438\u043c\u0443\u043b\u043e\u043c \u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u0431\u0437\u043e\u0440\u0443 API \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<\/p>\n<h4>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b<\/h4>\n<p>  <\/p>\n<ul>\n<li><a href=\"http:\/\/incpp.blogspot.com\/2009\/05\/http-libevent.html\">\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e HTTP \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c libevent<\/a><\/li>\n<li><a href=\"http:\/\/www.ibm.com\/developerworks\/aix\/library\/au-libev\/\">Boost network performance with libevent and libev<\/a><\/li>\n<li><a href=\"http:\/\/kzk9.net\/multi-threaded-httpserver-using-evhttp-libeve\">MULTI-THREADED HTTPSERVER USING EVHTTP (LIBEVENT)<\/a><\/li>\n<li><a href=\"http:\/\/www.ibm.com\/developerworks\/linux\/library\/l-async\/\">Boost application performance using asynchronous I\/O<\/a><\/li>\n<li><a href=\"http:\/\/webcrunch.ru\/library\/equipment\/clusters\/tuning-freebsd\/\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 FreeBSD \u0434\u043b\u044f \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f 100-200 \u0442\u044b\u0441\u044f\u0447 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439<\/a><\/li>\n<\/ul>\n<p>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!      \t   \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/152345\/\"> http:\/\/habrahabr.ru\/post\/152345\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" align=\"left\" src=\"http:\/\/habrastorage.org\/storage2\/1be\/d1d\/02c\/1bed1d02c8c5763a05de3cf733e4d021.png\"\/><\/p>\n<h4>\u0421 \u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c<\/h4>\n<p>  \u041d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u043c\u0435\u043d\u044f \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0438 \u00ab\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438\u00bb. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0435\u0440\u0444\u0438\u043d\u0433 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0447\u0442\u0435\u043d\u0438\u0435 man\u2019\u043e\u0432 \u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u2014 \u044d\u0442\u043e \u0432\u0441\u0435, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u0442 \u0447\u0435\u0442\u043a\u043e\u0439 \u0446\u0435\u043b\u0438. \u041f\u0440\u0438\u0434\u0443\u043c\u0430\u0432 \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043f\u043b\u043e\u0445\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0430\u0432\u044b\u043a\u043e\u0432.<\/p>\n<p>  \u0412 \u043e\u0434\u0438\u043d \u0438\u0437 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0443\u0447\u043d\u043e \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435 \u043e\u0442 \u0440\u0443\u0442\u0438\u043d\u044b, \u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0433\u0430\u043b\u043a\u0443 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b, \u0447\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0442\u0438\u0432 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0440\u044b\u043d\u043e\u043a, \u0432\u0434\u0440\u0443\u0433, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u043e\u043f\u0430\u0434\u0435\u0442\u0441\u044f\u2026 \u041a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u044f\u043c\u0438, \u043d\u0430 \u0442\u0435\u043c\u0443: \u00ab\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0412\u0430\u0441 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u00bb. \u0421\u0440\u0435\u0434\u0438 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u0438\u0448\u043b\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c \u0437\u0430\u0434\u0430\u043d\u0438\u0435\u043c. \u0422\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u2013 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c WebServer\u2019\u0430 \u043d\u0430 C++ \u043f\u043e\u0434 Linux \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 HTTP\u2013\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430; \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439\u2026   <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-152345","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/152345","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=152345"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/152345\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=152345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=152345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=152345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}