最近在使用langchain做transform相关应用,想要实现gpt那样的逐字输出的效果,效仿gpt一样,也决定使用eventsource来实现这个功能。
nodejs代码
const http = require('http');
const fs = require('fs');
const port = 3009; // 指定端口号
function genUUID() {
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) =>
(
c ^
(crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
).toString(16)
);
}
const server = http.createServer((req, res) => {
if (req.url === '/events') {
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
res.setHeader('Access-Control-Allow-Origin', '*');
setInterval(() => {
// 发送事件数据
res.write('event: message\n');
res.write(`data: ${genUUID()}\n\n`);
}, 1000);
} else {
// 处理其他请求
res.statusCode = 404;
res.end('Not Found');
}
});
server.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
前端代码
const eventSource = new EventSource("http://localhost:3009/events");
eventSource.onmessage = (event) => {
console.log("Received event:", event.data);
};
代码非常简单,把需要推送的内容放在message中即可。