使用nodejs创建EventSource接口

315 阅读1分钟

最近在使用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中即可。