feat: 添加守护进程(daemon)模式

- 实现 TCP Socket 守护进程,支持后台运行
- 添加 daemon 子命令:start/stop/status/logs
- 添加 send 子命令:发送文本到守护进程播放
- 添加日志级别自动检测(INFO/WARN/ERROR)
- 新日志格式:[时间戳] [级别] [PID] 消息
- 支持跨平台 ~/.config/tts/ 配置目录
This commit is contained in:
2026-04-25 05:50:28 +08:00
parent f81d1ab979
commit 19eb313bef
10 changed files with 1202 additions and 5 deletions

View File

@@ -127,7 +127,127 @@
7. ✅ Release 构建成功(仅有未使用代码警告)
8. ✅ 功能测试通过voices、show-config
## [0.2.0] - 开发中
## [0.3.0] - 2026-04-25
### 新增(守护进程模式)
- ✅ 实现守护进程Daemon模式类似 Docker 架构
- ✅ 创建 `src/daemon.rs` 模块TCP Socket 服务器)
- 使用 `tokio::net::TcpListener` 监听 TCP 连接
- 处理客户端 JSON 请求(文本、音色、格式、风格)
- PID 文件管理(启动/停止/状态检测)
- 日志记录到 `~/.config/tts/ttsd.log`
- 复用现有 TTS API 调用和音频播放功能
- ✅ 创建 `src/client.rs` 模块TCP 客户端)
- 连接到守护进程并发送 TTS 请求
- 支持 JSON over TCP 协议
- 接收并处理守护进程响应
- ✅ 新增 `daemon` 子命令:
- `daemon start [-d]` - 启动守护进程(支持 -d 后台运行)
- `daemon stop` - 停止守护进程(无需端口)
- `daemon status` - 查看守护进程状态(无需端口)
- `start` 支持 `--port` 参数(默认 9876
- ✅ 新增 `send` 子命令:
- 发送文本到守护进程进行语音合成
- 支持 `--voice``--format``--style` 参数
- 支持 `--port` 参数(默认 9876
- ✅ 新增 `ttsd` 内部子命令(守护进程模式)
-`daemon start -d` 自动调用
- 使用 `nohup` 实现后台运行Unix
- ✅ 跨平台支持:
- 所有平台统一使用 `~/.config/tts/` 目录
- TCP Socket 通用方案
- ✅ 协议设计JSON over TCP
### 测试通过2026-04-25
-`mimo-tt-s daemon start -d --port 9876` - 后台启动成功
-`mimo-tt-s send --port 9876 "消息"` - 发送成功,返回"播放完成"
-`mimo-tt-s daemon status` - 状态显示正确
-`mimo-tt-s daemon stop` - 停止成功
- ✅ 日志正常记录(`~/.config/tts/ttsd.log`
### 新增(第十二轮 - 日志格式升级)
- ✅ 添加日志级别(自动检测 INFO/WARN/ERROR
- ✅ 添加 PID 信息
- ✅ 新格式:`[时间戳] [级别] [PID] 消息`
- ✅ 添加 `daemon logs` 子命令
- 支持 `--lines N` 参数
- 默认显示 20 行
### 修改(第十二轮)
- 修改 daemon.rs
- 添加 LogLevel 枚举
- 自动检测消息中的关键词判断级别
- 新格式:追加到旧日志后面(区分新旧日志)
- 修改 cli.rs
- 添加 Logs 变体到 DaemonAction
### 新日志格式
```
[2026-04-25 05:48:05] [INFO] [15278] 正在播放音频...
[2026-04-25 05:48:10] [INFO] [15278] 响应: {"status":"ok","message":"播放完成"}
```
### 级别自动检测
- `INFO` - 默认(正常运行信息)
- `WARN` - 包含"警告"、"注意"
- `ERROR` - 包含"错误"、"失败"、"无法"
---
## [0.1.0] - 2026-04-24
- ✅ 实现守护进程Daemon模式类似 Docker 架构
- ✅ 创建 `src/daemon.rs` 模块TCP Socket 服务器)
- 使用 `tokio::net::TcpListener` 监听 TCP 连接
- 处理客户端 JSON 请求(文本、音色、格式、风格)
- PID 文件管理(启动/停止/状态检测)
- 日志记录到 `~/.config/tts/ttsd.log`
- 复用现有 TTS API 调用和音频播放功能
- ✅ 创建 `src/client.rs` 模块TCP 客户端)
- 连接到守护进程并发送 TTS 请求
- 支持 JSON over TCP 协议
- 接收并处理守护进程响应
- ✅ 新增 `daemon` 子命令:
- `daemon start` - 启动守护进程
- `daemon stop` - 停止守护进程
- `daemon status` - 查看守护进程状态
- 支持 `--port` 参数(默认 9876
- ✅ 新增 `send` 子命令:
- 发送文本到守护进程进行语音合成
- 支持 `--voice``--format``--style` 参数
- 支持 `--port` 参数(默认 9876
- ✅ 跨平台支持:
- 所有平台统一使用 `~/.config/tts/` 目录
- TCP Socket 通用方案Windows/Linux/macOS 均支持)
- ✅ 协议设计JSON over TCP
- 客户端请求:`{"text": "...", "voice": "...", "format": "...", "style": "..."}`
- 服务端响应:`{"status": "ok", "message": "..."}`
-`style` 参数作为宏观场景风格(与文本内 `[style]` 标签并存)
- 服务端自动转换为 `<style>...</style>` 标签(符合官方文档)
- 支持如"开心"、"东北话"、"唱歌"等风格描述
### 修改(第十一轮)
- 修改 `Cargo.toml`
- 添加 `dirs = "5.0"` 依赖(跨平台配置目录)
- 添加 `chrono = "0.4"` 依赖(日志时间戳)
- 修改 `src/cli.rs`
- 添加 `DaemonCommand``DaemonAction` 枚举
- 添加 `Send` 子命令定义
- 修改 `src/main.rs`
- 声明新模块 `daemon``client`
- 添加命令分发逻辑
### 技术细节
- 使用 `tokio::spawn` 处理多个并发客户端连接
- 使用 `serde_json` 序列化/反序列化 JSON 协议
- 使用 `dirs::home_dir()` 获取家目录,拼接配置路径
- PID 文件用于检测守护进程是否运行(跨平台兼容)
- 日志同时输出到文件和控制台
- 播放功能复用现有的 `play_audio()` 函数
- 守护进程支持 Ctrl+C 优雅停止
---
## [0.2.0] - 2026-04-24
### 新增(第十轮 - 自动语气转换器)
- ✅ 创建 `src/tone.rs` 独立模块(高内聚低耦合)