diff --git a/app.py b/app.py index af0cc4a..94c3156 100644 --- a/app.py +++ b/app.py @@ -50,6 +50,7 @@ import json import multiprocessing as mp import sqlite3 import os +import socket app = Flask(__name__) # sockets = Sockets(app) @@ -92,8 +93,8 @@ def set_status(db_path, status_code: int): """ 更新数据库中 livetlking_enable_status 的状态值 0 未启动(前端写入) - 1 启动成功 - 2 启动中 + 1 启动中 + 2 启动成功 3 启动失败 """ conn = sqlite3.connect(db_path, check_same_thread=False) @@ -125,6 +126,16 @@ def update_sessionid_in_db(sessionid): if conn: conn.close() +# 检查端口是否可用 +def check_port(port: int): + """检查端口是否被占用""" + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + try: + s.bind(('0.0.0.0', port)) # 尝试绑定端口 + return True # 端口可用 + except socket.error: + return False # 端口已占用 + def build_nerfreal(sessionid: int) -> BaseReal: opt.sessionid = sessionid @@ -522,6 +533,15 @@ if __name__ == '__main__': for route in list(appasync.router.routes()): cors.add(route) + # 端口配置 + listen_port = opt.listenport # 从配置中获取监听端口 + + # 检查端口是否被占用 + if not check_port(listen_port): + logger.error(f"端口 {listen_port} 已被占用,无法启动服务。") + set_status(db_path, 3) # 设置为启动失败 + exit(1) # 退出程序 + pagename = 'webrtcapi.html' if opt.transport == 'rtmp': pagename = 'echoapi.html'