H5 Server Sent Event服务端主动发送数据回客户端代码实例
导读:收集整理的这篇文章主要介绍了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");
效果图
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教程,巧夺天工,精雕玉琢。小宝典献丑了!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: H5 Server Sent Event服务端主动发送数据回客户端代码实例
本文地址: https://pptw.com/jishu/587171.html