Skip to content

服务配置组件

服务配置组件用于设置和管理应用服务的相关参数,如端口、主机地址等。

服务端口配置

基本用法

python
gui_config.add_menu("服务设置", "是一个启动服务的设置")
gui_config.add_argument(
    "port",
    metavar="服务端口",
    help="输入启动服务的端口",
    type=int,
    default=8080,
    widget="IntegerField",
    gooey_options={
        "min": 0,  # 最小值
        "max": 10000,  # 最大值
        "step": 1,  # 步长
        "stepStrictly": False,  # 是否只能输入步长的倍数
        "controls": True,  # 是否显示控制按钮
        "controlsPosition": "right",  # 控制按钮位置
        "placeholder": "请输入整数",  # 占位文本
        "size": "large"
    }
)

服务启动示例

在后端启动服务时,可以使用用户配置的端口:

python
def RunMain(self, dict_data=None):
    """
    运行主函数入口
    :param dict_data: 前端传来的参数字典
    :return:
    """
    # 解析参数执行具体任务
    if dict_data["menuName"] == "服务设置":
        # 获取用户配置的端口
        port = dict_data["formData"]["port"]
        # 启动服务
        Sh_Serve = Server(
            port=port,  # 使用用户配置的端口
            host='0.0.0.0',
            dict_data=dict_data,
            RunCode=self
        )
        Sh_Serve.run(dict_data)  # 启动WEB服务

完整服务配置示例

以下是一个更完整的服务配置示例,包含多个服务参数:

python
# 添加服务配置菜单
gui_config.add_menu("服务配置", "配置服务器相关参数")

# 添加服务分组
gui_config.add_argument_group("基本设置", gooey_options={"show_border": True})

# 端口配置
gui_config.add_argument(
    "port",
    metavar="服务端口",
    help="输入服务器监听端口",
    type=int,
    default=8080,
    widget="IntegerField",
    gooey_options={
        "min": 1024,
        "max": 65535,
        "step": 1,
        "controls": True,
        "placeholder": "请输入端口号",
        "size": "large"
    }
)

# 主机地址配置
gui_config.add_argument(
    "host",
    metavar="主机地址",
    help="输入服务器绑定地址",
    default="0.0.0.0",
    widget="TextField",
    gooey_options={
        "placeholder": "输入主机地址,如0.0.0.0或127.0.0.1",
        "size": "large"
    }
)

# 启用HTTPS
gui_config.add_argument(
    "use_https",
    metavar="启用HTTPS",
    help="是否使用HTTPS协议",
    default=False,
    widget="SwitchField",
    gooey_options={
        "activeText": "启用",
        "inactiveText": "禁用",
        "size": "large"
    }
)

# 高级设置分组
gui_config.add_argument_group("高级设置", gooey_options={"show_border": True})

# 线程数配置
gui_config.add_argument(
    "threads",
    metavar="线程数",
    help="服务器工作线程数",
    type=int,
    default=4,
    widget="IntegerField",
    gooey_options={
        "min": 1,
        "max": 32,
        "step": 1,
        "controls": True,
        "size": "large"
    }
)

# 超时设置
gui_config.add_argument(
    "timeout",
    metavar="请求超时(秒)",
    help="请求超时时间",
    type=int,
    default=30,
    widget="IntegerField",
    gooey_options={
        "min": 5,
        "max": 300,
        "step": 5,
        "controls": True,
        "size": "large"
    }
)

服务管理

服务配置完成后,通常需要提供服务管理功能,如启动、停止、重启服务等。这些功能可以在后端实现并暴露给前端调用。

服务状态维护

python
class ServerManager:
    def __init__(self):
        self.server = None
        self.server_status = "stopped"  # 初始状态为停止
    
    def start_server(self, port, host, use_https=False, threads=4, timeout=30):
        """启动服务"""
        if self.server_status == "running":
            return {"status": "error", "message": "服务已在运行中"}
        
        try:
            # 启动服务的代码
            self.server = Server(
                port=port,
                host=host,
                use_https=use_https,
                threads=threads,
                timeout=timeout
            )
            self.server.run()
            self.server_status = "running"
            return {"status": "success", "message": f"服务已启动在 {host}:{port}"}
        except Exception as e:
            return {"status": "error", "message": f"服务启动失败: {str(e)}"}
    
    def stop_server(self):
        """停止服务"""
        if self.server_status != "running":
            return {"status": "error", "message": "服务未运行"}
        
        try:
            # 停止服务的代码
            self.server.stop()
            self.server_status = "stopped"
            return {"status": "success", "message": "服务已停止"}
        except Exception as e:
            return {"status": "error", "message": f"服务停止失败: {str(e)}"}
    
    def restart_server(self, port, host, use_https=False, threads=4, timeout=30):
        """重启服务"""
        stop_result = self.stop_server()
        if stop_result["status"] == "error" and "服务未运行" not in stop_result["message"]:
            return stop_result
        
        # 短暂延迟确保端口释放
        import time
        time.sleep(1)
        
        return self.start_server(port, host, use_https, threads, timeout)

最佳实践

  1. 默认值设置:为服务配置提供合理的默认值,特别是端口号应当避免与常用端口冲突
  2. 参数验证:在接收用户输入的服务参数时,应进行有效性验证
  3. 错误处理:在服务启动和管理过程中,加入完善的错误处理和日志记录
  4. 用户反馈:提供明确的服务状态反馈,如服务是否成功启动、当前运行状态等
  5. 安全考虑:对于敏感配置,如数据库连接参数,应考虑加密存储和显示

基于MIT许可证发布