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(); + }); +}