From 219f431053a5cea09a25f8c712bf5c3470ae594b Mon Sep 17 00:00:00 2001 From: LCJ-MinYa <1049468118@qq.com> Date: Mon, 24 Feb 2025 10:41:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20node=E5=8E=9F=E7=94=9F=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0sse=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 13 ++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 index.js create mode 100644 package.json diff --git a/index.js b/index.js new file mode 100644 index 0000000..3b74d99 --- /dev/null +++ b/index.js @@ -0,0 +1,57 @@ +import http from 'http'; + +const server = http.createServer(async (req, res) => { + // 设置 CORS 头 + res.setHeader('Access-Control-Allow-Origin', '*'); // 允许所有域名访问 + res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); // 允许的 HTTP 方法 + res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); // 允许的请求头 + + if (req.method === 'OPTIONS') { + // 对于预检请求,直接返回 + res.writeHead(204); + res.end(); + return; + } + + 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(); + }, 1000); + }); + }; + + // 每秒发送一次消息 + await sendEvent('Start'); + for (let i = 0; i < 10; i++) { + await sendEvent(); + } + await sendEvent('End'); + res.end(); + + // 清理连接 + req.on('close', () => { + console.log('Client disconnected'); + res.end(); + }); + } else { + res.writeHead(404); + res.end(); + } +}); + +// 监听端口 +server.listen(3000, () => { + console.log('SSE server is running at http://localhost:3000/events'); +}); diff --git a/package.json b/package.json new file mode 100644 index 0000000..72b9263 --- /dev/null +++ b/package.json @@ -0,0 +1,13 @@ +{ + "name": "node-local-server", + "version": "1.0.0", + "description": "", + "main": "index.js", + "type": "module", + "scripts": { + "start": "node ./index.js" + }, + "keywords": [], + "author": "", + "license": "ISC" +}