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

2023-02-19  本文已影响0人  IOXusu

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);//真正开始请求的一步
上一篇下一篇

猜你喜欢

热点阅读