/** * lyroc 后端主程序 (Deno + Hono 版本) * 负责初始化应用和启动服务器 */ import { Hono } from "hono"; import { ConnectionManager } from "./modules/websocket_manager.ts"; import { startBackgroundTask, stopBackgroundTask, } from "./modules/background_tasks.ts"; import { registerRoutes } from "./modules/routes.ts"; import { initDB } from "./modules/lyrics.ts"; // 创建 Hono 应用 const app = new Hono(); // 创建 WebSocket 连接管理器 const manager = new ConnectionManager(); // 注册路由 registerRoutes(app, manager); // 启动时初始化 async function startup() { console.log("正在启动 API 服务..."); try { // 初始化数据库 await initDB(); console.log("数据库初始化完成"); // 启动后台任务 startBackgroundTask(manager); console.log("后台任务已启动"); } catch (error) { console.error(`启动失败: ${error}`); } } // 关闭时清理 function shutdown() { console.log("正在关闭服务..."); try { // 停止后台任务 stopBackgroundTask(); console.log("后台任务已停止"); // 关闭所有 WebSocket 连接 manager.closeAllConnections(); console.log("所有连接已关闭"); } catch (error) { console.error(`关闭时出错: ${error}`); } } // 处理进程信号 Deno.addSignalListener("SIGINT", () => { console.log("收到 SIGINT 信号,正在关闭..."); shutdown(); Deno.exit(0); }); Deno.addSignalListener("SIGTERM", () => { console.log("收到 SIGTERM 信号,正在关闭..."); shutdown(); Deno.exit(0); }); // 启动应用 await startup(); // 获取端口号 const port = Number(Deno.env.get("PORT") ?? 5005); console.log(`启动后端服务器在端口: ${port}`); // 启动服务器 Deno.serve({ port }, app.fetch);