|
|
|
|
|
# sse 客户端组件,支持v2、v3、安卓、ios、浏览器、微信小程序
|
|
|
|
|
|
|
|
|
|
|
|
## 使用说明
|
|
|
|
|
|
|
|
|
|
|
|
### 导入组件
|
|
|
|
|
|
|
|
|
|
|
|
点击右上角 `下载插件并导入HBuilderX`
|
|
|
|
|
|
|
|
|
|
|
|
uniapp插件地址:https://ext.dcloud.net.cn/plugin?id=20971
|
|
|
|
|
|
|
|
|
|
|
|
或者你可以参考我的示例
|
|
|
|
|
|
|
|
|
|
|
|
### 示例代码
|
|
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
|
<template>
|
|
|
|
|
|
<button @click="start">开始</button>
|
|
|
|
|
|
<button @click="stop">停止</button>
|
|
|
|
|
|
<template v-if="loading">
|
|
|
|
|
|
<view>{{ openLoading ? "正在连接sse..." : '连接完成!' }}</view>
|
|
|
|
|
|
<view>{{ loading ? "加载中..." : '' }}</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<view>
|
|
|
|
|
|
{{ responseText }}
|
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
<gao-ChatSSEClient
|
|
|
|
|
|
ref="chatSSEClientRef"
|
|
|
|
|
|
@onOpen="openCore"
|
|
|
|
|
|
@onError="errorCore"
|
|
|
|
|
|
@onMessage="messageCore"
|
|
|
|
|
|
@onFinish="finishCore"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
|
|
import { ref } from 'vue'
|
|
|
|
|
|
|
|
|
|
|
|
const chatSSEClientRef = ref(null);
|
|
|
|
|
|
const responseText = ref("");
|
|
|
|
|
|
const loading = ref(false);
|
|
|
|
|
|
const openLoading = ref(false);
|
|
|
|
|
|
|
|
|
|
|
|
const openCore = (response) => {
|
|
|
|
|
|
openLoading.value = false;
|
|
|
|
|
|
console.log("open sse:", response);
|
|
|
|
|
|
}
|
|
|
|
|
|
const errorCore = (err) => {
|
|
|
|
|
|
console.log("error sse:", err);
|
|
|
|
|
|
}
|
|
|
|
|
|
const messageCore = (msg) => {
|
|
|
|
|
|
console.log("message sse:", msg);
|
|
|
|
|
|
responseText.value += `${msg}\n`
|
|
|
|
|
|
}
|
|
|
|
|
|
const finishCore = () => {
|
|
|
|
|
|
console.log("finish sse")
|
|
|
|
|
|
loading.value = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const start = () => {
|
|
|
|
|
|
if (loading.value) return;
|
|
|
|
|
|
|
|
|
|
|
|
openLoading.value = true;
|
|
|
|
|
|
loading.value = true;
|
|
|
|
|
|
responseText.value = "";
|
|
|
|
|
|
|
|
|
|
|
|
chatSSEClientRef.value.startChat({
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 将它换成你的地址
|
|
|
|
|
|
* 注意:
|
|
|
|
|
|
* 如果使用 sse-server.js 要在手机端使用的话,请确保你的手机和电脑处在一个局域网下并且是正常的ip地址
|
|
|
|
|
|
*/
|
|
|
|
|
|
url: import.meta.env.VITE_CHAT_URL || 'http://localhost:3000/sse',
|
|
|
|
|
|
// 请求头
|
|
|
|
|
|
headers: {
|
|
|
|
|
|
Authorization: import.meta.env.VITE_CHAT_AUTHORIZATION,
|
|
|
|
|
|
},
|
|
|
|
|
|
// 默认为 post
|
|
|
|
|
|
method: 'post',
|
|
|
|
|
|
body: {
|
|
|
|
|
|
"stream":true,
|
|
|
|
|
|
"model": "deepseek-chat",
|
|
|
|
|
|
"messages": [
|
|
|
|
|
|
{"role": "system", "content": "你是来自艺咖科技的数字员工,你的名字叫小咖。"}]
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
const stop = () => {
|
|
|
|
|
|
chatSSEClientRef.value.stopChat()
|
|
|
|
|
|
console.log("stop");
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
# 温馨提示
|
|
|
|
|
|
|
|
|
|
|
|
示例项目根目录的`sse-server.js`文件提供了一个简单的sse测试服务,使用 `node sse-server.js`运行
|
|
|
|
|
|
|
|
|
|
|
|
**提出问题之前请先确保你的接口没有问题**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
**请仔细阅读我提供的示例代码。**
|
|
|
|
|
|
|
|
|
|
|
|
**如果你的程序有问题请先下载我提供的示例项目调试!**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
如果想了解原理请看我掘金的文章: [点击前往](https://juejin.cn/post/7435632766375084082)
|
|
|
|
|
|
|
|
|
|
|
|
本插件依赖于 `fetch-event-source` 库,将编辑后的js集成,因为我修改了原来库解析的逻辑,使其更适用于中国宝宝体质。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
**如果这个组件解决了你的问题,麻烦去[github](https://github.com/gaozhenqiang/uniapp-chatSSEClient/) 帮我点个赞,谢谢大家**
|
|
|
|
|
|
|
|
|
|
|
|
有新需求或者bug可以在github上提issues,或者加我q `1933669775`
|
|
|
|
|
|
|
|
|
|
|
|
# 常见问题
|
|
|
|
|
|
|
|
|
|
|
|
## ios报错:TypeError: Load failed
|
|
|
|
|
|
|
|
|
|
|
|
后端接口处理一下跨域即可解决。
|
|
|
|
|
|
|