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

发布时间:2018-12-11 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了html5教程-H5 Server Sent Event服务端主动发送数据回客户端代码实例脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

效果图

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

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");

效果图

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

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");

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

脚本宝典总结

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

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:HTML