Bladeren bron

Test EventSource

ithewei 4 jaren geleden
bovenliggende
commit
f51b471850
4 gewijzigde bestanden met toevoegingen van 58 en 4 verwijderingen
  1. 7 3
      examples/httpd/handler.cpp
  2. 1 1
      examples/httpd/router.cpp
  3. 50 0
      html/EventSource.html
  4. 0 0
      html/WebSocket.html

+ 7 - 3
examples/httpd/handler.cpp

@@ -287,13 +287,17 @@ int Handler::upload(const HttpContextPtr& ctx) {
 
 int Handler::sse(const HttpContextPtr& ctx) {
     ctx->writer->EndHeaders("Content-Type", "text/event-stream");
-    // send(time) every 1s
+    // send(message) every 1s
     hv::setInterval(1000, [ctx](hv::TimerID timerID) {
         char szTime[DATETIME_FMT_BUFLEN] = {0};
         datetime_t now = datetime_now();
         datetime_fmt(&now, szTime);
-        ctx->writer->write("event: timeout\n");
-        ctx->writer->write(hv::asprintf("data: %s\n\n", szTime));
+        // @test html/EventSource.html EventSource.onmessage
+        std::string msg("event: message\n");
+        msg += "data: ";
+        msg += szTime;
+        msg += "\n\n";
+        ctx->writer->write(msg);
     });
     return HTTP_STATUS_UNFINISHED;
 }

+ 1 - 1
examples/httpd/router.cpp

@@ -135,5 +135,5 @@ void Router::Register(hv::HttpService& router) {
     router.POST("/upload", Handler::upload);
 
     // SSE: Server Send Events
-    router.GET("/SSE", Handler::sse);
+    router.GET("/sse", Handler::sse);
 }

+ 50 - 0
html/EventSource.html

@@ -0,0 +1,50 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+<meta charset="utf-8">
+<title>EventSource客户端</title>
+
+<script type="text/javascript">
+function EventSourceTest(url)
+{
+  if (typeof(EventSource) !== "undefined")
+  {
+    var es = new EventSource(url);
+
+    es.onopen = function()
+    {
+      alert("连接已建立");
+    };
+
+    es.onmessage = function(ev)
+    {
+      console.log("received event: " + ev.data);
+      var li=document.createElement("li");
+      li.innerHTML=ev.data;
+      document.getElementById("msg_list").appendChild(li);
+    };
+
+    es.onerror = function(e)
+    {
+      alert("连接断开");
+    };
+  }
+  else
+  {
+    alert("您的浏览器不支持 EventSource!");
+  }
+}
+</script>
+</head>
+
+<body>
+  URL: <input type="text" id="url" value="http://127.0.0.1:8080/sse" style="width:300px;">
+  <button onclick="EventSourceTest(document.getElementById('url').value)">运行 EventSource</button>
+  <div>
+    <ul id="msg_list" style="height:500px;overflow-y:scroll;">
+    </ul>
+  <div>
+</body>
+
+</html>

+ 0 - 0
html/websocket_client.html → html/WebSocket.html