美文网首页
Sse之okhttp3中EventSource简单用法-调用方

Sse之okhttp3中EventSource简单用法-调用方

作者: IOXusu | 来源:发表于2023-02-19 15:50 被阅读0次

    SSE(服务器推送事件)的介绍

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

    在网页端的例子不少,都是现成的代码复制,但是我这因为想在Okhttp3中使用的,发现使用情况几乎没有,没办法只能坑头自己研究,终于还是研究出使用方法了。

    这边先给出调用方的代码,后面有时间再整理服务端代码。

    Okhttp3中的使用

    首先是依赖包 okhttp3依赖包不可少,还有okhttp-sse包也少不了
    <dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.2.0</version>
    </dependency>

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp-sse</artifactId>
            <version>4.2.0</version>
        </dependency>
    

    实例代码

    直接上代码,注释已给

      // 定义see接口
        Request request = new Request.Builder().url("http://127.0.0.1:8080/sse/2").build();
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(1, TimeUnit.DAYS)
                .readTimeout(1, TimeUnit.DAYS)//这边需要将超时显示设置长一点,不然刚连上就断开,之前以为调用方式错误被坑了半天
                .build();
    
        // 实例化EventSource,注册EventSource监听器
        RealEventSource realEventSource = new RealEventSource(request, new EventSourceListener() {
            private long callStartNanos;
    
            private void printEvent(String name) {
                long nowNanos = System.nanoTime();
                if (name.equals("callStart")) {
                    callStartNanos = nowNanos;
                }
                long elapsedNanos = nowNanos - callStartNanos;
                System.out.printf("=====> %.3f %s%n", elapsedNanos / 1000000000d, name);
            }
    
            @Override
            public void onOpen(EventSource eventSource, Response response) {
                printEvent("onOpen");
            }
    
            @Override
            public void onEvent(EventSource eventSource, String id, String type, String data) {
                printEvent("onEvent");
                System.out.println(data);//请求到的数据
            }
    
            @Override
            public void onClosed(EventSource eventSource) {
                printEvent("onClosed");
            }
    
            @Override
            public void onFailure(EventSource eventSource, Throwable t, Response response) {
                printEvent("onFailure");//这边可以监听并重新打开
            }
        });
        realEventSource.connect(okHttpClient);//真正开始请求的一步

    相关文章

      网友评论

          本文标题:Sse之okhttp3中EventSource简单用法-调用方

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