Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8873

Node.js: Server Sent Events のサンプル

$
0
0
実行結果 sse_server.js // ------------------------------------------------------------------- // sse_server.js // // May/19/2021 // // ------------------------------------------------------------------- var http = require("http") var fs = require("fs") const port = 1027 http.createServer(function (req, res) { const index = "./sse.html" var fileName var interval console.log ("req.url = " + req.url) if (req.url === "/") fileName = index else fileName = "." + req.url if (fileName === "./stream") { res.writeHead(200, {"Content-Type":"text/event-stream", "Connection":"keep-alive"}) res.write("retry: 10000\n") res.write("event: connecttime\n") res.write("data: " + (new Date()) + "\n\n") res.write("data: " + (new Date()) + "\n\n") interval = setInterval(function() { res.write("data: " + (new Date()) + "\n\n") }, 2000) req.connection.addListener("close", function () { clearInterval(interval) }, false) } else if (fileName === index) { fs.exists(fileName, function(exists) { if (exists) { fs.readFile(fileName, function(error, content) { if (error) { res.writeHead(500) res.end() } else { res.writeHead(200, {"Content-Type":"text/html"}) res.end(content, "utf-8") } }) } else { res.writeHead(404) res.end() } }) } else { res.writeHead(404) res.end() } }).listen (port, "127.0.0.1") console.log("Server running at http://127.0.0.1:" + port + "/") // ------------------------------------------------------------------- sse.html <!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" /> <script> window.addEventListener("load", function() { var button = document.getElementById("connect"); var status = document.getElementById("status"); var output = document.getElementById("output"); var connectTime = document.getElementById("connecttime"); var source; function connect() { source = new EventSource("stream"); source.addEventListener("message", function(event) { output.textContent = event.data; }, false); source.addEventListener("connecttime", function(event) { connectTime.textContent = "Connection was last established at: " + event.data; }, false); source.addEventListener("open", function(event) { button.value = "Disconnect"; button.onclick = function(event) { source.close(); button.value = "Connect"; button.onclick = connect; status.textContent = "Connection closed!"; }; status.textContent = "Connection open!"; }, false); source.addEventListener("error", function(event) { if (event.target.readyState === EventSource.CLOSED) { source.close(); status.textContent = "Connection closed!"; } else if (event.target.readyState === EventSource.CONNECTING) { status.textContent = "Connection closed. Attempting to reconnect!"; } else { status.textContent = "Connection closed. Unknown error!"; } }, false); } if (!!window.EventSource) { connect(); } else { button.style.display = "none"; status.textContent = "Sorry, your browser doesn't support server-sent events"; } }, false); </script> <title>Server-Sent Events Demo</title> </head> <body> <input type="button" id="connect" value="Connect" /><br /> <span id="status">Connection closed!</span><br /> <span id="connecttime"></span><br /> <span id="output"></span> <hr /> May/19/2021 AM 09:30<br /> </body> </html> サーバーの実行 node ./sse_server.js ブラウザーで http://127.0.0.1:1027/ にアクセス

Viewing all articles
Browse latest Browse all 8873

Trending Articles