我们知道,在server sent event里,通过eventsource对象接收服务器发送事件的通知是有三个事件的,message, open, error这三种,今天就给大家演示一下服务端主动发送数据回客户端在h5里的实现步奏。
Server Sent Event
Server Sent Event通过EventSource对象接收服务器发送事件的通知. 有三个事件message, open, error
下面的代码演示了使用的方法
例子代码运行环境: node.js
代码
粘贴下面代码运行node index.js
//index.htmlnbsp;html>server-sent 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); Connection closed!
登录后复制
服务端代码
//index.jsconst 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");
登录后复制
相信看了这些案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!
相关阅读:
node.js
node.js
node.js
以上就是服务端主动发送数据回客户端在H5里的实现步奏的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3194704.html