zoukankan      html  css  js  c++  java
  • server-sent-event使用流信息向客户端发送数据

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>server-sent-event</title>
    </head>
    <body>
    <div>
    <p>server-sent-event 是一种服务器向客户端发送消息的单向通信方式,采用流信息传送数据,类似视频播放,一直保持和客户端的连接,不断地发送数据。</p>
    
    <p>SSE 使用 HTTP 协议,现有的服务器软件都支持。WebSocket 是一个独立协议。</p>
    <p>SSE 属于轻量级,使用简单;WebSocket 协议相对复杂。</p>
    <p>SSE 默认支持断线重连,WebSocket 需要自己实现。</p>
    <p>SSE 一般只用来传送文本,二进制数据需要编码后传送,WebSocket 默认支持传送二进制数据。</p>
    <p>SSE 支持自定义发送的消息类型。</p>
    
    
    <script>
        if('EventSource' in window){
            console.log("支持EventSource");
            var es = new EventSource("http://localhost:3009/stream");
            es.onopen = function(){
                console.log("连接成功");
            }
            es.onmessage = function(message){   //默认是message事件,
                console.log("接收到数据",message);
            }
            es.onerror = function(err){
                console.log("error",err);
            }
    
            es.addEventListener("connecttime",function(event){ //监听自定义事件
                console.log('监听自定义事件',event);
            },false);
    
        }
    
    </script>
    </div>
    </body>
    </html>
    

      

    基于node 的服务端代码

    var http = require("http");
    
    http.createServer(function(req,res){
        console.log(req.url);
        var filename = '.'+req.url;
        if(filename==='./stream'){
            res.writeHead(200,{
                "Content-Type":"text/event-stream",
                "Cache-Control":"no-cache",
                "Connection":"keep-alive",
                "Access-Control-Allow-Origin": '*',
            });
    
            res.write("retry: 10000
    ");
            res.write("event: connecttime
    ");
            res.write("data: "  + "来自自定义事件的数据
    
    ");
            res.write("data: "  + "自定义事件
    
    ");
    
            interval = setInterval(function () {  //event 字段未设置的,默认为message事件
              res.write("data: " + (new Date()) + "
    
    ");
            }, 1000);
    
            req.connection.addListener("close", function () {
              clearInterval(interval);
            }, false);
    
        }
    
    }).listen(3009,"127.0.0.1");
    console.log("server start at port 3009");
    

      

  • 相关阅读:
    2018年最新整理ios APP审核被拒的常见原因
    在线一键生成安卓证书keystore文件
    iOS证书的类型功能和申请介绍
    【2018】ios app真机调试到上架App Store完整教程
    预防SQL注入
    Python模块——HashLib(摘要算法)与base64
    Python加密与解密
    PostgreSQL常用命令
    二级子目录(后台目录)设置二级域名
    积累
  • 原文地址:https://www.cnblogs.com/lydialee/p/6930171.html
Copyright © 2011-2022 走看看