服务端主动发送数据回客户端在H5里的实现步奏

我们知道,在server sent event里,通过eventsource对象接收服务器发送事件的通知是有三个事件的,message, open, error这三种,今天就给大家演示一下服务端主动发送数据客户端在h5里的实现步奏。

Server Sent Event

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

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

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

代码

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

//index.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");

相信看了这些案例你已经掌握了方法,更多精彩请关注创想鸟其它相关文章!

相关阅读:

HTML5标签嵌套规则的详细介绍

浏览器兼容HTML5和CSS3的问题

html5做剪刀石头布效果的教程

以上就是服务端主动发送数据回客户端在H5里的实现步奏的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1545342.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 16:55:25
下一篇 2025年12月21日 16:55:40

相关推荐

发表回复

登录后才能评论
关注微信