Skip to content

SSE 工具

ChatLuna 提供了 Server-Sent Events (SSE) 工具。

基础用法

typescript
import { sse, sseIterable } from 'koishi-plugin-chatluna/utils/sse'


const response = await chatLunaFetch('https://api.example.com/sse')

await sse(response, async (rawData) => {
    console.log('收到数据:', rawData)
})

for await (const event of sseIterable(response)) {
    if (event === '[DONE]') {
        console.log('SSE 传输完成')
        break
    }
    console.log('收到事件:', event)
}

API

sse(response, onEvent, cacheCount)

  • response: Response | ReadableStreamDefaultReader<string> SSE 响应对象
  • onEvent: (rawData: string) => Promise<string | boolean | void> 事件处理回调函数
  • cacheCount: number 缓存计数,默认为 0
  • 返回值: Promise<void>

处理 SSE 响应流,通过回调函数处理每个事件数据。当 cacheCount 大于 0 时,将累积指定数量的事件后一次性调用回调函数。

sseIterable(response)

  • response: Response | ReadableStreamDefaultReader<string> SSE 响应对象
  • 返回值: AsyncGenerator<string, '[DONE]', unknown>

将 SSE 响应转换为异步迭代器,每次迭代返回一个事件数据。当所有事件处理完成时,返回 '[DONE]'

rawSeeAsIterable(response, cacheCount)

  • response: Response | ReadableStreamDefaultReader<string> SSE 响应对象
  • cacheCount: number 缓存计数,默认为 0
  • 返回值: AsyncGenerator<string, void, unknown>

将 SSE 响应转换为原始数据的异步迭代器。当 cacheCount 大于 0 时,将累积指定数量的原始数据后一次性产出。

注意

rawSeeAsIterable 返回的是未经解析的原始 SSE 数据流,而 sseIterable 返回的是经过解析的事件数据。

页面历史

在 CC-BY-SA-4.0 许可下发布