diff --git a/server/index.ts b/server/index.ts index 25c6b91..cc1b774 100644 --- a/server/index.ts +++ b/server/index.ts @@ -2,17 +2,79 @@ export default { async fetch(request, env) { const url = new URL(request.url); - if (url.hostname === 'localhost' || url.hostname === '127.0.0.1') + // 本地开发环境延迟处理 + if (url.hostname === 'localhost' || url.hostname === '127.0.0.1') { await new Promise((r) => setTimeout(r, 250)); + } + // API 路由处理 if (url.pathname.startsWith('/api/')) { - await env.KV.put('last-api-call', `${Date.now()} ${request.method} ${url.pathname}`); + await env.KV.put('events:api:last-call', `${new Date().toISOString()} ${request.method} ${url.pathname}`); + + // 获取所有可用的键名 + const availableKeys = [ + 'events:api:last-call', + 'events:ws:connection', + 'events:ws:message', + 'events:ws:disconnection' + ]; return Response.json({ timestamp: Date.now(), - lastApiCall: await env.KV.get('last-api-call'), + lastApiCall: await env.KV.get('events:api:last-call'), + availableKeys: availableKeys, + storedData: { + apiLastCall: await env.KV.get('events:api:last-call'), + wsConnection: await env.KV.get('events:ws:connection'), + wsMessage: await env.KV.get('events:ws:message'), + wsDisconnection: await env.KV.get('events:ws:disconnection'), + } }); } + + // WebSocket 连接处理 + if (url.pathname === '/ws') { + const upgradeHeader = request.headers.get('Upgrade'); + if (upgradeHeader !== 'websocket') { + return new Response('Expected websocket', { status: 400 }); + } + + const [client, server] = Object.values(new WebSocketPair()); + + // 处理服务器端WebSocket消息 + server.accept(); + env.KV.put('events:ws:connection', `${new Date().toISOString()} ${url.pathname}`); + + // accept 后立即发送欢迎消息 + if (url.hostname === 'localhost' || url.hostname === '127.0.0.1') { + await new Promise((r) => setTimeout(r, 250)); + } + + server.send(`欢迎连接到WebSocket服务器!连接时间: ${new Date().toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })}`); + + server.addEventListener('message', async (event) => { + console.log('收到客户端消息:', event.data); + await env.KV.put('events:ws:message', `${new Date().toISOString()} ${event.data}`); + + // 回复消息给客户端 + if (url.hostname === 'localhost' || url.hostname === '127.0.0.1') { + await new Promise((r) => setTimeout(r, 250)); + } + + server.send(`服务器收到: ${event.data} (时间: ${new Date().toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })})`) + }); + + server.addEventListener('close', () => { + console.log('WebSocket连接关闭'); + env.KV.put('events:ws:disconnection', `${new Date().toISOString()} ${url.pathname}`); + }); + + return new Response(null, { + status: 101, + webSocket: client, + }); + } + return new Response(null, { status: 404 }); }, } satisfies ExportedHandler; diff --git a/src/layouts/base-layout/base-layout.vue b/src/layouts/base-layout/base-layout.vue index 5cd2093..99f5d37 100644 --- a/src/layouts/base-layout/base-layout.vue +++ b/src/layouts/base-layout/base-layout.vue @@ -12,25 +12,25 @@ const appStore = useAppStore(); -
+
4#GlobalMenu
diff --git a/src/pages/index.page.vue b/src/pages/index.page.vue index 75f49b7..d2d86a3 100644 --- a/src/pages/index.page.vue +++ b/src/pages/index.page.vue @@ -1,9 +1,23 @@