// Node.js HTTP服务包装器 const http = require('http'); const url = require('url'); const fs = require('fs'); const path = require('path'); // 服务配置 const HOST = process.env.HOST || '{{host}}'; const PORT = process.env.PORT || {{port}}; const TIMEOUT = process.env.TIMEOUT || {{timeout}}; // 尝试导入算法模块 let algorithmModule = null; try { // 根据入口点导入算法 if ("{{entry_point}}" === "") { // 尝试导入主要模块 algorithmModule = require('./algorithm'); } else { // 导入入口点 algorithmModule = require('./{{entry_point}}'); } console.log('算法模块导入成功'); } catch (e) { console.error('算法模块导入失败:', e); algorithmModule = null; } /** * 调用算法 * @param {Object} requestData 请求数据 * @returns {Object} 算法执行结果 */ function callAlgorithm(requestData) { if (!algorithmModule) { throw new Error('算法模块未加载'); } // 尝试调用算法的主要函数 try { if (algorithmModule.predict) { return algorithmModule.predict(requestData); } else if (algorithmModule.run) { return algorithmModule.run(requestData); } else if (algorithmModule.main) { return algorithmModule.main(requestData); } else { throw new Error('未找到算法执行函数'); } } catch (e) { throw new Error(`算法执行失败: ${e.message}`); } } /** * 处理请求 * @param {http.IncomingMessage} req 请求对象 * @param {http.ServerResponse} res 响应对象 */ function handleRequest(req, res) { const parsedUrl = url.parse(req.url, true); const pathname = parsedUrl.pathname; // 设置响应头 res.setHeader('Content-Type', 'application/json'); if (req.method === 'GET') { if (pathname === "{{health_check_path}}") { // 健康检查 res.writeHead(200); res.end(JSON.stringify({ status: 'healthy', service: '{{project_name}}' })); } else if (pathname === '/info') { // 服务信息 const info = { service: '{{project_name}}', version: '1.0.0', host: HOST, port: PORT, timeout: TIMEOUT, algorithm_loaded: algorithmModule !== null }; res.writeHead(200); res.end(JSON.stringify(info)); } else { // 404响应 res.writeHead(404); res.end(JSON.stringify({ error: 'Not Found' })); } } else if (req.method === 'POST') { let body = ''; // 读取请求体 req.on('data', chunk => { body += chunk.toString(); }); req.on('end', () => { try { // 解析请求数据 const requestData = JSON.parse(body); // 记录请求开始时间 const startTime = Date.now(); // 调用算法 const result = callAlgorithm(requestData); // 计算响应时间 const responseTime = (Date.now() - startTime) / 1000; // 构建响应 const response = { success: true, result: result, response_time: responseTime.toFixed(4), message: '算法执行成功' }; // 发送响应 res.writeHead(200); res.end(JSON.stringify(response)); } catch (e) { // 构建错误响应 const errorResponse = { success: false, error: e.message, message: '算法执行失败' }; // 发送错误响应 res.writeHead(400); res.end(JSON.stringify(errorResponse)); } }); } else { // 不支持的方法 res.writeHead(405); res.end(JSON.stringify({ error: 'Method Not Allowed' })); } } /** * 启动服务 */ function startServer() { const server = http.createServer(handleRequest); server.listen(PORT, HOST, () => { console.log(`服务启动成功,监听地址: ${HOST}:${PORT}`); console.log(`健康检查地址: http://${HOST}:${PORT}{{health_check_path}}`); console.log(`服务信息地址: http://${HOST}:${PORT}/info`); }); server.on('error', (error) => { console.error('服务启动失败:', error); }); } // 启动服务 startServer();