Android okHttp-sse 实现chatgpt逐字逐句效果

1. 什么是SSE

Server-Send Events 服务器发送事件,简称SSE。服务器主动向客户端推送消息,我们常见的有 WebSocket (SignalR) ,SSE 也是其中一种。
    SSE 是HTML5规范的一部分,该规范非常简单,主要由两部分组成:第一部分是服务端与浏览器端的通讯协议(Http协议),第二部分是浏览器端可供JavaScript使用的EventSource对象。
    严格意义上来说,Http协议是无法做到服务器主动向浏览器发送协议,但是可以变通下,服务器向客户端发起一个声明,我下面发送的内容将是 text/event-stream 格式的,这个时候浏览器就知道了。响应文本内容是一个持续的数据流,每个数据流由不同的事件组成,并且每个事件可以有一个可选的标识符,不同事件内容之间只能通过回车符\r 和换行符\n来分隔,每个事件可以由多行组成。目前除了IE和Edge,其他浏览器均支持(注:摘自https://www.cnblogs.com/jesn/p/16267606.html

2. 使用方法

implementation 'com.squareup.okhttp3:okhttp:4.10.0' 

implementation 'com.squareup.okhttp3:okhttp-sse:4.11.0'
 val createFactory = EventSources.createFactory(okHttpClient)
        val eventSourceListener = object : EventSourceListener() {
            override fun onEvent(
                eventSource: EventSource,
                id: String?,
                type: String?,
                data: String
            ) {
                //事件接收
                Logger.d(data)
 
            }

            override fun onFailure(eventSource: EventSource, t: Throwable?, response: Response?) {
                super.onFailure(eventSource, t, response)
            }
        }
createFactory.newEventSource(request, eventSourceListener)

请求头需要添加 

addHeader("Accept", "text/event-stream")

创建okHttpClient 

val builder = OkHttpClient.Builder()
builder.retryOnConnectionFailure(true)
builder.connectTimeout(5, TimeUnit.MINUTES)
builder.readTimeout(5, TimeUnit.MINUTES)
okHttpClient = builder.build()

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
OkHttp SSE 是一个用于处理 Server-Sent Events(SSE)的库。Server-Sent Events 是一种允许服务器向客户端推送事件的协议。通过使用 OkHttp SSE,你可以方便地处理 SSE 事件流并与服务器进行实时通信。 你可以使用 OkHttp SSE 来订阅服务器端的事件流,并在接收到事件时执行相应的操作。它提供了一些方便的方法来处理 SSE 事件,如连接服务器、接收事件、处理注释等。 以下是使用 OkHttp SSE 的基本示例代码: ```java OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://example.com/events") .build(); EventSource eventSource = new EventSource(request, new EventSourceListener() { @Override public void onEvent(EventSource eventSource, String id, String type, String data) { // 处理接收到的事件 System.out.println("Received event: " + data); } @Override public void onFailure(EventSource eventSource, Throwable t, Response response) { // 处理连接失败或接收事件发生错误的情况 t.printStackTrace(); } }); // 开始连接服务器并订阅事件 eventSource.start(); ``` 上述代码首先创建了一个 OkHttpClient 对象,并构建了一个发送 SSE 请求的 Request 对象。然后,创建了一个 EventSource 对象,并实现了 EventSourceListener 接口来处理接收到的事件和错误情况。最后,调用 `eventSource.start()` 方法开始连接服务器并订阅事件。 希望这能够回答你的问题!如果你有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值