• Web实时通信技术服务器发送事件(ServerSent Events)


    1.概念原理

    Server-Sent 事件指的是网页自动获取来自服务器的更新。以前也可能做到这一点,前提是网页不得不询问是否有可用的更新。通过服务器发送事件,更新能够自动到达。

    特点:单向的,页面发送请求后,后台保持住请求,有新消息则返回信息到前端。当链接断开或失败时,浏览器端会自动重连。

    应用场景:适合浏览器端只做数据接收,不做数据提交的信息展示端。比如监控看板,视频播放器等。

    2.具体实现

    2.1浏览器端依靠 EventSource 对象发起请求。

    栗子:

    <script type="text/javascript">
    
       const loadData = () => {
    
           // 初始化一个EventSource对象
           var source = new EventSource("@Url.Action("GetData")");
    
           // 接收信息回调函数
           source.onmessage = function (event) {
               document.getElementById("result").innerHTML += event.data + "<br>";
           };
    
           // 链接打开时回调函数
           source.onopen = function (event) {
               console.log("ready ...");
           }
           // 链接断开或异常回到函数
           source.onerror = function (event) {
    
               console.log("error ...");
           }
         
        }
    
        loadData();
    </script>

    2.2 服务器端规则

    • 把报头 "Content-Type" 设置为 "text/event-stream"
    • 规定不对页面进行缓存
    • 输出发送日期(始终以 "data: " 开头, "\n\n"结尾)
    • 向网页刷新输出数据
      栗子:
            
              public void GetData()
              {
                 var response = HttpContext.Response;
                  response.ContentType = "text/event-stream; charset=utf-8"; // 设置响应类型
                  Response.Expires = -1;//设置不缓存
      
                  int i = 0;
                  while (i < 10  && response.IsClientConnected)
                  {
                      i++;
      
                      Response.Write("data:" + DateTime.Now + "\n\n"); // 以data:开头 ,\n\n结尾
                      Response.Flush(); // 刷新输出数据
      
                      System.Threading.Thread.Sleep(1000);
                  }
              }
      

        3.运行栗子结果

  • 相关阅读:
    鉴权系统的梳理及并发问题的考虑
    分布式事物解决选择
    电商平台客服和商铺的数据表设计( 初稿记录)43
    问题整理
    关于
    问题整理
    问题整理(常问3连)
    问题整理
    强引用、软引用、弱引用、幻象引用的区别
    通过aop获取切面方法请求入参名称和值的json打印
  • 原文地址:https://www.cnblogs.com/paulcode/p/15993155.html
Copyright © 2020-2023  润新知