我们知道,在server sent event里,通过eventsource对象接收服务器发送事件的通知是有三个事件的,message, open, error这三种,今天就给大家演示一下服务端主动发送数据回客户端在h5里的实现步奏。
Server Sent Event
Server Sent Event通过EventSource对象接收服务器发送事件的通知. 有三个事件message, open, error
下面的代码演示了使用的方法
例子代码运行环境: node.js
代码
粘贴下面代码运行node index.js
//index.htmlserver-sent Connection closed!
服务端代码
//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");相信看了这些案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
相关阅读:










