Closed skywolf123 closed 1 month ago
经过持续不断的尝试,我终于明白问题所在了!
这个问题是由于部署平台的限制,比如 Vercel 和 zeabur,他们的免费计划在部署 next.js 项目时有隐含的超过一定时间不请求就会中断连接(在 zeabur 中这个时间是 30 秒)。
虽然chat-messages接口仍然在响应,但是由于没有新的请求,连接会中断。
在 zeabur 的免费计划中,可以测试性的部署为 docker 项目,这样就可以拥有更长的时间,而在一定程度上规避这个问题。
那么,我目前找到的有效方法是什么呢?
在客户端中(比如 webapp-conversation)加入一个定时请求,随便请求一个 API 的接口。
我的实践是每隔 10 秒请求 meta 接口,因为它足够简单。
具体是:
在 app\components\index.tsx 中加入下面这段
useEffect(() => {
const intervalId = setInterval(() => {
fetch('/api/meta')
.then(response => response.json())
.then(data => {
console.log('/api/meta succeed:', data)
})
.catch(error => {
console.error('/api/meta error:', error)
})
}, 10000)
return () => clearInterval(intervalId)
}, [])
我遇到个问题,卡了好几天了,我用webapp-conversation访问dify工作流的API,在chat-messages长时间的节点时会中断,而我用postman去调接口却不会中断 每次中断都会发现一个自动的get请求api/messages?conversation_id=&limit=20&last_id= 这个请求会500,从而导致整体中断 但是我在webapp-conversation的代码里没找到相关的调用 仅仅发现它跟dify工作流的通信是通过dify-client这个sdk组件实现的