{"id":5406,"date":"2026-04-18T12:14:16","date_gmt":"2026-04-18T03:14:16","guid":{"rendered":"https:\/\/www.freelifemakers.org\/wordpress\/?p=5406"},"modified":"2026-04-18T12:25:27","modified_gmt":"2026-04-18T03:25:27","slug":"webserver-httplib-sse","status":"publish","type":"post","link":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/04\/18\/webserver-httplib-sse\/","title":{"rendered":"[Webserver]httplib webserver+SSE"},"content":{"rendered":"\n<p>\ud83d\udc49\ud83c\udffb SSE\ub294 \uc11c\ubc84\uac00 \ud074\ub77c\uc774\uc5b8\ud2b8\ub85c \uc2e4\uc2dc\uac04 \ub370\uc774\ud130\ub97c \uc2a4\ud2b8\ub9ac\ubc0d(\uc804\uc1a1)\ud560 \uc218 \uc788\ub3c4\ub85d \ud574\uc8fc\ub294 \uae30\uc220\uc785\ub2c8\ub2e4.<br>SSE (Server-Sent Events) is a technology that allows the server to stream real-time data to the client.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb SSE \uc11c\ubc84 \ubc0f \ud074\ub77c\uc774\uc5b8\ud2b8 \/ SSE Server and Client<\/p>\n\n\n\n<p>\u2714\ufe0f \ucf54\ub4dc \/ Code<\/p>\n\n\n\n<p>&#8212; sse_server.cpp<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"httplib.h\"\n#include &lt;chrono&gt;\n#include &lt;string&gt;\n#include &lt;thread&gt;\n\nint main() {\n    httplib::Server svr;\n\n    svr.Get(\"\/\", &#91;](const httplib::Request&amp;, httplib::Response&amp; res) {\n        res.set_content(R\"(\n&lt;!doctype html&gt;&lt;html&gt;&lt;body&gt;\n&lt;h1&gt;SSE Test&lt;\/h1&gt;\n&lt;pre id=\"log\"&gt;&lt;\/pre&gt;\n&lt;script&gt;\nconst log = document.getElementById('log');\nconst es = new EventSource('\/events'); \/\/ same-origin\nes.onopen = () =&gt; log.textContent += \"&#91;connected]\\n\";\nes.onmessage = (e) =&gt; log.textContent += e.data + \"\\n\";\nes.onerror = () =&gt; log.textContent += \"&#91;reconnecting]\\n\";\n&lt;\/script&gt;\n&lt;\/body&gt;&lt;\/html&gt;\n)\", \"text\/html; charset=utf-8\");\n    });\n\n    svr.Get(\"\/events\", &#91;](const httplib::Request&amp;, httplib::Response&amp; res) {\n        res.set_header(\"Cache-Control\", \"no-cache\");\n        res.set_header(\"Connection\", \"keep-alive\");\n        res.set_chunked_content_provider(\"text\/event-stream; charset=utf-8\",\n            &#91;n = 0](size_t, httplib::DataSink&amp; sink) mutable {\n                std::string msg = \"data: tick \" + std::to_string(n++) + \"\\n\\n\";\n                sink.write(msg.c_str(), msg.size());\n                std::this_thread::sleep_for(std::chrono::seconds(1));\n                return true; \/\/ \uacc4\uc18d \uc5f0\uacb0 \uc720\uc9c0\n            });\n    });\n\n    svr.set_keep_alive_max_count(1000);\n    svr.set_keep_alive_timeout(60);\n\n    std::cout &lt;&lt; \"SSE server listening on http:\/\/0.0.0.0:5080\\n\";\n    svr.listen(\"0.0.0.0\", 5080);\n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<p>&#8212; sse_client.cpp<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"httplib.h\"\n\nint main() {\n    httplib::Client cli(\"http:\/\/localhost:5080\");\n    httplib::sse::SSEClient sse(cli, \"\/events\");\n\n    sse.on_message(&#91;](const httplib::sse::SSEMessage &amp;msg) {\n        std::cout &lt;&lt; \"Event: \" &lt;&lt; msg.event &lt;&lt; std::endl;\n        std::cout &lt;&lt; \"Data: \" &lt;&lt; msg.data &lt;&lt; std::endl;\n    });\n\n    sse.start();  \/\/ Blocking, with auto-reconnect\n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<p>&#8212; sse server<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>g++ sse_server.cpp -o sse_server -std=c++17 -pthread<\/code><\/pre>\n\n\n\n<p>&#8212; sse client<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>g++ sse_client.cpp -o sse_client -std=c++17 -pthread<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f\uc2e4\ud589 \/ Run<\/p>\n\n\n\n<p>&#8212; \uc11c\ubc84\uc2e4\ud589 \/ Run Server<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/sse_server<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"207\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_server-jpg-1024x207.jpg\" alt=\"\" class=\"wp-image-5408\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_server-jpg-1024x207.jpg 1024w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_server-jpg-300x61.jpg 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_server-jpg-768x155.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_server-jpg-400x81.jpg 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_server-jpg-800x162.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_server-jpg.jpg 1138w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">sse server<\/figcaption><\/figure>\n\n\n\n<p>&#8212; \ud074\ub77c\uc774\uc5b8\ud2b8\uc2e4\ud589 \/ Run Client <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/sse_client<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"407\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_terminal-1024x407.png\" alt=\"\" class=\"wp-image-5411\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_terminal-1024x407.png 1024w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_terminal-300x119.png 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_terminal-768x305.png 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_terminal-400x159.png 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_terminal-800x318.png 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_terminal.png 1158w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>&#8212; \ube0c\ub77c\uc6b0\uc800\uc2e4\ud589 \/ Access Browser<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http:&#47;&#47;localost:5080<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"606\" height=\"510\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_br.png\" alt=\"\" class=\"wp-image-5414\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_br.png 606w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_br-300x252.png 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/sse_br-400x337.png 400w\" sizes=\"auto, (max-width: 606px) 100vw, 606px\" \/><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc49\ud83c\udffb SSE\ub294 \uc11c\ubc84\uac00 \ud074\ub77c\uc774\uc5b8\ud2b8\ub85c \uc2e4\uc2dc\uac04 \ub370\uc774\ud130\ub97c \uc2a4\ud2b8\ub9ac\ubc0d(\uc804\uc1a1)\ud560 \uc218 \uc788\ub3c4\ub85d \ud574\uc8fc\ub294 \uae30\uc220\uc785\ub2c8\ub2e4.SSE (Server-Sent Events) is a technology that allows the server to stream real-time data to the client. \ud83d\udc49\ud83c\udffb SSE \uc11c\ubc84 \ubc0f \ud074\ub77c\uc774\uc5b8\ud2b8 \/ SSE Server and Client \u2714\ufe0f \ucf54\ub4dc \/ Code &#8212; sse_server.cpp &#8212; sse_client.cpp &#8212; sse server &#8212; sse client \u2714\ufe0f\uc2e4\ud589 \/ Run &#8212; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,1],"tags":[],"class_list":["post-5406","post","type-post","status-publish","format-standard","hentry","category-cpp","category-uncategorized","missing-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/5406","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=5406"}],"version-history":[{"count":6,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/5406\/revisions"}],"predecessor-version":[{"id":5416,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/5406\/revisions\/5416"}],"wp:attachment":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=5406"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=5406"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=5406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}