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

2024-02-21  本文已影响0人  IT界的古天乐

1. GET 形式

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才能停止

        },

    });

}

注意事项:

#SSE 连接时的超时时间

proxy read timeout 86400s;

#取消缓冲

proxy buffering off;

#关闭代理缓存

proxy cache off;
上一篇 下一篇

猜你喜欢

热点阅读