80 lines
1.8 KiB
TypeScript
80 lines
1.8 KiB
TypeScript
/**
|
|
* 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);
|