前端使用 fetch 调用 SSE 服务

最近接触了一些和 chatGPT 类似的模型服务,基本上都和 GPT API 一样使用 SSE 通信。

默认前端的 API 调用 SSE 只能是 GET 请求,当需要使用 body 传递数据时就不太方便,这里使用fetch实现POST请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
fetch("http://192.168.1.11:7860/chat", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ "prompt": "用小孩子能听懂的话讲清楚什么是微积分", "history": [] }), // 将数据作为请求体发送
})
.then((response) => {
const reader = response.body.getReader();
return new ReadableStream({
start(controller) {
function push() {
reader.read().then(({ value, done }) => {
if (done) {
controller.close();
return;
}
controller.enqueue(value);
push();
});
}
push();
},
});
})
.then((stream) => {
const textDecoder = new TextDecoder();
const readableStreamDefaultReader = stream.getReader();
function processStream() {
readableStreamDefaultReader.read().then(({ value, done }) => {
if (done) {
console.log('End of stream');
return;
}
console.log(textDecoder.decode(value));
processStream();
});
}
processStream();
})
.catch((error) => {
console.error(error);
});

前端使用 fetch 调用 SSE 服务
https://bubao.github.io/posts/3e0444b9.html
作者
一念
发布于
2023年5月19日
许可协议