feat: 后端改为deno
This commit is contained in:
79
backend-deno/main.ts
Normal file
79
backend-deno/main.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
/**
|
||||
* 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 = parseInt(Deno.env.get("PORT") || "5005");
|
||||
console.log(`启动后端服务器在端口: ${port}`);
|
||||
|
||||
// 启动服务器
|
||||
Deno.serve({ port }, app.fetch);
|
||||
Reference in New Issue
Block a user