首页前端开发HTMLH5 Server Sent Event服务端主动发送数据回客户端代码实例

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

时间2024-01-26 19:19:03发布访客分类HTML浏览800
导读:收集整理的这篇文章主要介绍了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核实处理,我们将尽快回复您,谢谢合作!

constdivHTMLletpost-format-galleryState

若转载请注明出处: H5 Server Sent Event服务端主动发送数据回客户端代码实例
本文地址: https://pptw.com/jishu/587171.html
html5之DOM编程讲解 零基础如何快速的学习和掌握html5?

游客 回复需填写必要信息