HTML5 服务器发送事件(Server-Sent Events)

前言:

       文章内容参考:

                                HTML5 服务器发送事件(Server-Sent Events) | 菜鸟教程

                                @microsoft/fetch-event-source - npm

                                event-source-polyfill - npm

正文:

        HTML5服务器发送事件(server-sent event)允许网页获得来自服务器的更新

        EventSource是单向通信的(是服务器向客户端的单向通信,客户端接收来自服务器的事件流)、基于HTTP协议(EventSource是基于标准的HTTP/HTTPS协议),使用长轮询或类似的机制,但并不是完全双向的通信、文本数据传输(通常用于传输文本数据,如服务器推送的消息或事件)、自动重连(当连接中断,EventSource会自动尝试重新连接,不需要手动处理重连)。

       使用场景:适合需要从服务器获取实时信息的应用,例如股票行情或新闻推送。

 使用方式:

  1、直接使用浏览器自带EventSource,缺点:不可以自定义参数且只能get方式请求,无法向服务端传递请求参数,比如请求头中携带token

 if (window.hasOwnProperty("EventSource")) {
    // url 接口
    let source = new EventSource(
      "https://api.baichuan-ai.com/v1/chat/completions"
    );
    // 当发生错误
    source.onerror = function () {
      console.log("error");
    };
    // 当通往服务器的连接被打开
    source.onopen = function () {
      console.log("连接成功");
    };
    // 当接收到消息
    source.onmessage = function (event) {
      console.log("服务器推送数据", event.data);
    };
  }

2、使用 EventSourcePolyfill ,解决使用EventSource无法在header中传参,缺点:只能get请求且无法向服务端传递请求参数

  import { EventSourcePolyfill } from "event-source-polyfill";
  // url 接口
  let source = new EventSourcePolyfill(
    "https://api.baichuan-ai.com/v1/chat/completions",
    {
      headers: {
        Authorization: "token",
      },
    }
  );
  // 当发生错误
  source.onerror = function () {
    console.log("error");
  };
  // 当通往服务器的连接被打开
  source.onopen = function () {
    console.log("连接成功");
  };
  // 当接收到消息
  source.onmessage = function (event) {
    console.log("服务器推送数据", event.data);
  };

3、使用fetchEventSource,实现post请求方式

import { fetchEventSource } from "@microsoft/fetch-event-source";
 let es = new fetchEventSource(
    "https://api.baichuan-ai.com/v1/chat/completions",
    {
      headers: {
        Authorization: "token值",
        withCredentials: true,
        "Content-Type": "application/json",
      },
      method: "post",
      // 参数
      body: JSON.stringify({
        username: "LIIIIII",
        password: "123456",
      }),
      onmessage(event) {
        console.log(event.data);
      },
      onerror() {
        console.log("erroe");
      },
    }
  );

相关推荐

  1. HTML5 服务器发送事件Server-Sent Events)

    2024-01-30 15:44:01       39 阅读
  2. HTML 事件

    2024-01-30 15:44:01       7 阅读
  3. HTML:HTML事件汇总

    2024-01-30 15:44:01       17 阅读
  4. Qt event事件发送

    2024-01-30 15:44:01       33 阅读
  5. k8s发布nacos-server,nodeport配置注意事项

    2024-01-30 15:44:01       24 阅读
  6. HTML DOM 事件

    2024-01-30 15:44:01       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-30 15:44:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-30 15:44:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-30 15:44:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-30 15:44:01       18 阅读

热门阅读

  1. JNDI以及利用JNDI进行漏洞攻击

    2024-01-30 15:44:01       36 阅读
  2. 【Vue】为什么Vue3使用Proxy代替defineProperty?

    2024-01-30 15:44:01       33 阅读
  3. Hotspot源码解析-第28章-终结篇章

    2024-01-30 15:44:01       31 阅读
  4. 在Ubuntu环境下搭建小型化Git服务器

    2024-01-30 15:44:01       32 阅读
  5. 隐马尔可夫模型系列——(三)模型推断

    2024-01-30 15:44:01       31 阅读
  6. sftp上传下载文件

    2024-01-30 15:44:01       36 阅读
  7. 我们一起聊聊React列表渲染与Key

    2024-01-30 15:44:01       44 阅读
  8. 学习总结7

    2024-01-30 15:44:01       32 阅读
  9. 一文搞懂Linux查看log日志常用命令

    2024-01-30 15:44:01       25 阅读
  10. 超级自驱力——每个人都是自己的CEO

    2024-01-30 15:44:01       42 阅读
  11. Spring 学习2 --基于xml管理Bean

    2024-01-30 15:44:01       30 阅读