{"id":4655,"date":"2022-02-02T15:30:25","date_gmt":"2022-02-02T06:30:25","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=4655"},"modified":"2022-02-02T17:09:38","modified_gmt":"2022-02-02T08:09:38","slug":"11","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=4655","title":{"rendered":"WebSocket++"},"content":{"rendered":"<h1>WebSocket++<\/h1>\n<p>. . . . . . . . . . . . . . . . . . . . . . . .<br \/>\n. . . . . . . . . . . . . . . . . . . . . . . .<br \/>\n. . . . . . . . . . . . . . . . . . . . . . . .<\/p>\n<h2>server<\/h2>\n<pre><code class=\"language-bash\">docker run --detach -p 10001:8080 jmalloc\/echo-server<\/code><\/pre>\n<h2>client<\/h2>\n<pre><code class=\"language-c++\">#include &lt;websocketpp\/config\/asio_no_tls_client.hpp&gt;\n\n#include &lt;websocketpp\/client.hpp&gt;\n\n#include &lt;iostream&gt;\n\ntypedef websocketpp::client&lt;websocketpp::config::asio_client&gt; client;\n\nusing websocketpp::lib::placeholders::_1;\nusing websocketpp::lib::placeholders::_2;\nusing websocketpp::lib::bind;\n\n\/\/ pull out the type of messages sent by our config\ntypedef websocketpp::config::asio_client::message_type::ptr message_ptr;\n\n\/\/ Handlers\nvoid on_open(client* c, websocketpp::connection_hdl hdl) {\n    std::string msg = &quot;Hello&quot;;\n    c-&gt;send(hdl,msg,websocketpp::frame::opcode::text);\n    c-&gt;get_alog().write(websocketpp::log::alevel::app, &quot;Sent Message: &quot;+msg);\n}\n\nvoid on_fail(client* c, websocketpp::connection_hdl hdl) {\n    c-&gt;get_alog().write(websocketpp::log::alevel::app, &quot;Connection Failed&quot;);\n}\n\nvoid on_message(client* c, websocketpp::connection_hdl hdl, message_ptr msg) {\n    c-&gt;get_alog().write(websocketpp::log::alevel::app, &quot;Received Reply: &quot;+msg-&gt;get_payload());\n    c-&gt;close(hdl,websocketpp::close::status::normal,&quot;&quot;);\n}\n\nvoid on_close(client* c, websocketpp::connection_hdl hdl) {\n    c-&gt;get_alog().write(websocketpp::log::alevel::app, &quot;Connection Closed&quot;);\n}\n\nint main(int argc, char* argv[]) {\n    client c;\n\n    std::string uri = &quot;ws:\/\/localhost:9002&quot;;\n\n    if (argc == 2) {\n        uri = argv[1];\n    }\n\n    try {\n        \/\/ set logging policy if needed\n        c.clear_access_channels(websocketpp::log::alevel::frame_header);\n        c.clear_access_channels(websocketpp::log::alevel::frame_payload);\n        \/\/c.set_error_channels(websocketpp::log::elevel::none);\n\n        \/\/ Initialize ASIO\n        c.init_asio();\n\n        \/\/ Register our handlers\n        c.set_open_handler(bind(&amp;on_open,&amp;c,::_1));\n        c.set_fail_handler(bind(&amp;on_fail,&amp;c,::_1));\n        c.set_message_handler(bind(&amp;on_message,&amp;c,::_1,::_2));\n        c.set_close_handler(bind(&amp;on_close,&amp;c,::_1));\n\n        \/\/ Create a connection to the given URI and queue it for connection once\n        \/\/ the event loop starts\n        websocketpp::lib::error_code ec;\n        client::connection_ptr con = c.get_connection(uri, ec);\n        c.connect(con);\n\n        \/\/ Start the ASIO io_service run loop\n        c.run();\n    } catch (const std::exception &amp; e) {\n        std::cout &lt;&lt; e.what() &lt;&lt; std::endl;\n    } catch (websocketpp::lib::error_code e) {\n        std::cout &lt;&lt; e.message() &lt;&lt; std::endl;\n    } catch (...) {\n        std::cout &lt;&lt; &quot;other exception&quot; &lt;&lt; std::endl;\n    }\n}<\/code><\/pre>\n<pre><code class=\"language-bash\">sudo apt install libwebsocketpp-dev\n\ng++ basic_client.cpp -lpthread\n.\/a.out http:\/\/localhost:10001\/.ws<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>WebSocket++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=4655\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"class_list":["post-4655","post","type-post","status-publish","format-standard","hentry","category-linux"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/4655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4655"}],"version-history":[{"count":2,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/4655\/revisions"}],"predecessor-version":[{"id":4657,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/4655\/revisions\/4657"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}