好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

html5教程-H5 Server Sent Event服务端主动发送数据回客户端代码实例

小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

效果图

Server Sent Event

Server Sent Event通过EventSource对象接收 服务器 发送事件的通知. 有三个事件message, o PE n, error

下面的代码演示了使用的方法

例子代码运行环境: node.js

代码

粘贴下面代码运行node index.js

 //index.ht ML   <!DOCTYPE html> <html lang="en"> <head>   < ;m eta charset="UTF-8">   <meta n am e="viewport" content="width=device-width, in IT ial -s cale=1.0">   <meta http-equiv="X-UA-Compatible" content="ie= Edge ">   <title> Server-sent </title> </head> <body>   <script>     window.addEventListener("load",function () {       let  stat us = document.getElementById("status");       let output = document.getElementById("output");       let source;        function connect() {         source = new EventSource("stream");//与服务器端建立连接         //鉴定message事件, 获取服务端发送的数据         source.addEventListener("message", function (event) {           output.textContent = event.data;         }, false);         //监听open事件, 判断连接 是否 进行中         source,addEventListener("open", function (event) {           status.textContent = & # 39;连接打开了';         },false);         //监听error事件, 处理连接错误的情况         source.addEventListener("error", function (event) {           if (event.t arg et.readyState  ===  EventSource.CLOSED) {             source.close();             status.textContent = '连接关闭了';           } else {             status.textContent = "连接关闭了! 未知错误 !";           }         }, false);       }       if(!!window.EventSource) {         connect();       } else {         status.textContent = "不支持server-sent"       }     },false);   </script>   <span id="status">Connection closed!</span>   < br >   <span id="output"></span> </body> </html>

服务端代码

 //index.js const http = require('http'); const fs = require('fs'); http.createServer(function (req, res) {   let interval,       fileName,       index = "./index.html";   console. LOG (req.url);   if(req.url  == = "/") {     fileName = index;   } else {     fileName = "." + req.url;   }    if (fileName === "./stream") {//如果server sent event则设置相应头信息     res.writeHead(200, {       "Content -t ype" : "text/event-stream",       "Cache-Control" : "no-cache",       "Connection": "keep-alive",     })     res.write("retry: 10000/n");//过10000秒重试     res.write("data: " + (new Date()) + "/n/n");     interval = setInterval(function () {       res.write("data: " + (new Date()) + "/n/n");     }, 1000);     //监听close事件, 用于停止定时器     req.connection.addListener("close", function () {       clearInterval(interval);     }, false);   } else if (fileName === index) {     //判断是否为页面请求, 并找到相应文件返回页面     fs.exists(fileName, function (exists) {       if (exists) {         fs.rea DF ile(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 {         console.log(123);         res.writeHead(404);         res.end();       }     })   } else {     res.writeHead(404);     res.end();   } }).listen(8080, "127.0.0.1"); console.log("at 8080");

效果图

Server Sent Event

Server Sent Event通过EventSource对象接收服务器发送事件的通知. 有三个事件message, open, error

下面的代码演示了使用的方法

例子代码运行环境: node.js

代码

粘贴下面代码运行node index.js

 //index.html  <!DOCTYPE html> <html lang="en"> <head>   <meta charset="UTF-8">   <meta name="viewport" content="width=device-width, initial-scale=1.0">   <meta http-equiv="X-UA-Compatible" content="ie=edge">   <title>server-sent</title> </head> <body>   <script>     window.addEventListener("load",function () {       let status = document.getElementById("status");       let output = document.getElementById("output");       let source;        function connect() {         source = new EventSource("stream");//与服务器端建立连接         //鉴定message事件, 获取服务端发送的数据         source.addEventListener("message", function (event) {           output.textContent = event.data;         }, false);         //监听open事件, 判断连接是否进行中         source,addEventListener("open", function (event) {           status.textContent = '连接打开了';         },false);         //监听error事件, 处理连接错误的情况         source.addEventListener("error", function (event) {           if (event.target.readyState === EventSource.CLOSED) {             source.close();             status.textContent = '连接关闭了';           } else {             status.textContent = "连接关闭了!未知错误!";           }         }, false);       }       if(!!window.EventSource) {         connect();       } else {         status.textContent = "不支持server-sent"       }     },false);   </script>   <span id="status">Connection closed!</span>   <br>   <span id="output"></span> </body> </html>

服务端代码

 //index.js const http = require('http'); const fs = require('fs'); http.createServer(function (req, res) {   let interval,       fileName,       index = "./index.html";   console.log(req.url);   if(req.url === "/") {     fileName = index;   } else {     fileName = "." + req.url;   }    if (fileName === "./stream") {//如果server sent event则设置相应头信息     res.writeHead(200, {       "Content-Type" : "text/event-stream",       "Cache-Control" : "no-cache",       "Connection": "keep-alive",     })     res.write("retry: 10000/n");//过10000秒重试     res.write("data: " + (new Date()) + "/n/n");     interval = setInterval(function () {       res.write("data: " + (new Date()) + "/n/n");     }, 1000);     //监听close事件, 用于停止定时器     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 {         console.log(123);         res.writeHead(404);         res.end();       }     })   } else {     res.writeHead(404);     res.end();   } }).listen(8080, "127.0.0.1"); console.log("at 8080");

觉得 可用,就经常来吧! 欢迎评论哦!&nbs p; html5教程 ,巧夺天工,精雕玉琢。小宝典献丑了!

总结

以上是 为你收集整理的 html5教程-H5 Server Sent Event服务端主动发送数据回客户端代码实例 全部内容,希望文章能够帮你解决 html5教程-H5 Server Sent Event服务端主动发送数据回客户端代码实例 所遇到的问题。

如果觉得 网站内容还不错, 推荐好友。

查看更多关于html5教程-H5 Server Sent Event服务端主动发送数据回客户端代码实例的详细内容...

  阅读:51次