From 5b70e5af3ce4b7973ed4b6b6de71e0540a537b30 Mon Sep 17 00:00:00 2001 From: LCJ-MinYa <1049468118@qq.com> Date: Fri, 14 Mar 2025 15:25:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8B=86=E5=88=86=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 40 ++++++---------------------------------- module/sse.js | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 35 deletions(-) diff --git a/index.js b/index.js index 1f24ea1..bb6c039 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,5 @@ import http from 'http'; +import sse from './module/sse.js'; const server = http.createServer(async (req, res) => { // 设置 CORS 头 @@ -14,41 +15,12 @@ const server = http.createServer(async (req, res) => { } if (req.url === '/events') { - // 设置响应头 - res.writeHead(200, { - 'Content-Type': 'text/event-stream', - 'Cache-Control': 'no-cache', - Connection: 'keep-alive', - }); - - // 发送事件 - const sendEvent = (msg) => { - return new Promise((resolve) => { - setTimeout(() => { - const data = `data: ${msg ? msg : new Date().toLocaleTimeString()}\n\n`; - res.write(data); - resolve(); - }, 100); - }); - }; - - // 每秒发送一次消息 - await sendEvent('Start'); - for (let i = 0; i < 200; i++) { - await sendEvent(); - } - await sendEvent('End'); - res.end(); - - // 清理连接 - req.on('close', () => { - console.log('Client disconnected'); - res.end(); - }); - } else { - res.writeHead(404); - res.end(); + sse(req, res); + return; } + + res.writeHead(404); + res.end(); }); // 监听端口 diff --git a/module/sse.js b/module/sse.js index 2433376..63bdcc2 100644 --- a/module/sse.js +++ b/module/sse.js @@ -1 +1,33 @@ -function sse(req, res) {} +export default async function (req, res) { + // 设置响应头 + res.writeHead(200, { + 'Content-Type': 'text/event-stream', + 'Cache-Control': 'no-cache', + Connection: 'keep-alive', + }); + + // 发送事件 + const sendEvent = (msg) => { + return new Promise((resolve) => { + setTimeout(() => { + const data = `data: ${msg ? msg : new Date().toLocaleTimeString()}\n\n`; + res.write(data); + resolve(); + }, 100); + }); + }; + + // 每秒发送一次消息 + await sendEvent('Start'); + for (let i = 0; i < 200; i++) { + await sendEvent(); + } + await sendEvent('End'); + res.end(); + + // 清理连接 + req.on('close', () => { + console.log('Client disconnected'); + res.end(); + }); +}