美文网首页
SSE长连接,服务端推送,web端GET和POST用法及问题处理

SSE长连接,服务端推送,web端GET和POST用法及问题处理

作者: IT界的古天乐 | 来源:发表于2024-02-21 09:22 被阅读0次

1. GET 形式

  • 使用的库:event-source-polyfill
  • 写法:
let evtSource;

function startSSE() {

    evtSource = new EventSourcePolyfill('http://****/api/***', {

    headers: {

        'Authorization': ''

    }

});

evtSource.addEventListener("custom_event_name", (event) => {

    const newElement = document.createElement("li");

    const eventList = document.getElementById("list");

    newElement.textContent = `收到的数据: ${event.data}`;

    eventList.appendChild(newElement);

    });

}

function closeSSE() {

    evtSource.close()

}

2. POST 形式

npm install @microsoft/fetch-event-source
  • 写法
/** * 获取任务列表-SSE传输模式 */

function handlePublishSSE() {

    const params = {};

    let url = "http://****";

    const ctrl = new AbortController();

    fetchEventSource(url, {

    method: "POST",

    headers: {

        Authorization: "",

        "Content-Type": "application/json",

    },

    body: JSON.stringify(params),

    signal: ctrl.signal,

    openWhenHidden: true,

    onmessage(msg: EventSourceMessage) {

        if (msg.event === "custom_event_name") {

            var result = JSON.parse(msg.data);

            // 处理 result 即可

        } else {

            console.log("SSE接收信息 非指定类型", msg);

        }

    },

    onclose() {

        console.log("SSE接收信息 断开");

        // 监听后端断开,前端主动断开

        ctrl.abort();

    },

    onerror(err: any) {

        console.log("SSE接收信息 异常");

        throw err;

        //必须throw才能停止

        },

    });

}

注意事项:

  • 问题现象:web端本地起服务正常,部署到服务器上。无法实现流形式,数据最后一次性返回。

  • 问题分析:应该是nginx默认开启缓存引起的。


    image
  • 解决方式:Nginx的配置文件增加以下配置:

#SSE 连接时的超时时间

proxy read timeout 86400s;

#取消缓冲

proxy buffering off;

#关闭代理缓存

proxy cache off;

相关文章

  • post 和 get 方式提交数据有什么区别?

    如果服务端和客户端在符合语义的条件下处理了HTTP的post方法和get方法提交的请求的情况下,post和get方...

  • 2016 08 21 socket.io技术

    消息推送 Server-Sent Events(SSE) 允许服务端推送数据到客户端:性能较好、实时性较强,但存在...

  • socket.io技术

    消息推送 Server-Sent Events(SSE) 允许服务端推送数据到客户端:性能较好、实时性较强,但存在...

  • Volley

    Android Volley使用 Get和Post区别 GET用来从服务端获取数据,POST用于上传或者修改数据 ...

  • 服务端推送

    目前已知的服务端推送方法 WebSocket Https2.0 SSE 今天了解一下SSE(转载至阮一峰) 一、S...

  • post,get

    GET与POST 阶段目标 能够进行服务端渲染操作 能够说出GET与POST请求方式的区别 能够在服务端分别接收G...

  • 实时交互

    socket.io Server-Sent Events(SSE) 允许服务端推送数据到客户端:性能较好、实时性较...

  • React Native用fetch调用.net mvc web

    用到知识: 1.fetch的get,post 2. .net服务端api的跨域问题 3.本地.net的服务端调试问...

  • Tomcat之NioEndpoint源码分析

    NioEndpoint涉及tomcat服务端是如何处理客户端的连接及数据处理的模型 NioEndpoint启动 e...

  • golang http2长链接问题

    前几天项目中遇到了一个长链接假死问题,服务端和client端采用的是h2c长连接。服务端作为sidecar部署在k...

网友评论

      本文标题:SSE长连接,服务端推送,web端GET和POST用法及问题处理

      本文链接:https://www.haomeiwen.com/subject/voxpadtx.html