美文网首页
SSE初体验

SSE初体验

作者: _静夜听雨_ | 来源:发表于2023-07-17 13:58 被阅读0次

最近看到的,记录一下,SSE长连接

什么是SSE?

SSE(Sever-Sent Event),就是浏览器向服务器发送了一个HTTP请求,保持长连接,服务器不断单向地向浏览器推送“信息”,这么做是为了节省网络资源,不用一直发请求,建立新连接。
是一种服务端向客户端推送信息的单向通信方法

EventSource

1.SSE具有由 W3C 标准化的网络协议
2.EventSource 是SSE客户端接口
3.EventSource不支持headers参数
4.使用EventSource传输,传输内容一定是text/event-stream的,即后台要设置返回的content-type为text/event-stream

上代码

import React, { useEffect, useRef, useState } from "react";

const readyStateArr = [
    { key: 0, value: "0 连接尚未建立,或已关闭且客户端正在重新连接" },
    { key: 1, value: "户端有一个打开的连接并在接收到事件时处理它们" },
    { key: 2, value: "连接未打开,并且客户端未尝试重新连接,要么出现致命错误,要么调用了 close() 方法" },
];

const useSSE = () => {
    const source = useRef<EventSource | null>(null);
    const [sseData, setSseData] = useState({});
    const [sseReadyState, setSseReadyState] = useState({
        key: 0,
        value: "正在链接中",
    });

    const createSSE = () => {
        try {
            source.current = new EventSource("https://test/sse");
            source.current.onopen = (e) => {
                setSseReadyState(readyStateArr[source.current?.readyState ?? 0]);
            };
            source.current.onerror = (e) => {
                setSseReadyState(readyStateArr[source.current?.readyState ?? 0]);
            };
            source.current.onmessage = (e) => {
                setSseData({ ...JSON.parse(e.data) });
            };
        } catch (error) {
            console.log(error);
        }
    };

    const initSSE = () => {
        if (!source.current || source.current.readyState === 2) {
            createSSE();
        }
    };

    const closeSSE = () => {
        source.current?.close();
    };

    const reconnectSSE = () => {
        try {
            closeSSE();
            source.current = null;
            createSSE();
        } catch (error) {
            console.log(error);
        }
    };

    useEffect(() => {
        initSSE();
    }, []);

    return {
        sseData,
        sseReadyState,
        closeSSE,
        reconnectSSE,
    };
};

export default useSSE;

相关文章

  • 【SpringBoot WEB 系列】SSE 服务器发送事件详解

    【SpringBoot WEB系列】SSE 服务器发送事件详解 SSE 全称Server Sent Event,直...

  • 怎么使用Server-Sent Events (SSE)

    一、什么是Server-Sent Events(SSE) Server-Sent Events简称(SSE),是服...

  • Linux 概述

    一. CPU的种类: 最新的Intel/AMD的x86架构中 多媒体微指令集:MMX,SSE,SSE2,SSE3,...

  • Some Blogs

    SSE c/c++ 代码中使用sse指令集加速 evo evo工具kitti转tumevo wiki

  • sse

    SSE(Server-Sent Eevents,服务器发送事件)用于创建到服务器的单向连接,服务器通过这个连接可以...

  • 问题集

    为什么残差平方和SSE的自由度是n-2?why is the degree of freedom of SSE(S...

  • Tensorflow 运行警告提示 Your CPU suppo

    解决方法: 要使你的Tensorflow 支持 SSE4.1 SSE4.2 AVX AVX2 FMA 指令,并给出...

  • webflux 实现服务端推送消息

    实现即时消息的方法有很多种比如websocket,sse; 而sse 又有spring mvc 实现的也有webf...

  • (三)数据推送之sse

    介绍 Server-Sent Events(简称SSE) SSE是一种能让浏览器通过http连接自动收到服务器端更...

  • 服务端推送

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

网友评论

      本文标题:SSE初体验

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