<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>VC 分享 on 代码随手记</title><link>https://caixy.xin/</link><description>Recent content in VC 分享 on 代码随手记</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 05 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://caixy.xin/index.xml" rel="self" type="application/rss+xml"/><item><title>cc-gateway - 多平台远程驱动智能体 CLI 的网关</title><link>https://caixy.xin/posts/cc-gateway/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>https://caixy.xin/posts/cc-gateway/</guid><description>&lt;p&gt;&lt;strong&gt;项目地址&lt;/strong&gt;: &lt;a class="link" href="https://github.com/caixy-plus/cc-gateway" target="_blank" rel="noopener"
 &gt;https://github.com/caixy-plus/cc-gateway&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;cc-gateway 是一个用 Rust 编写的网关工具，让你通过 &lt;strong&gt;飞书/Lark、Telegram、QQ&lt;/strong&gt; 聊天机器人或浏览器 &lt;strong&gt;WebUI&lt;/strong&gt;，远程驱动运行在本机上的多种智能体 CLI —— Claude Code、Cursor、Pi、OpenCode 等。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;本次大更新&lt;/strong&gt;：从最初&amp;quot;飞书 + 本地 CLI 控制 Claude&amp;quot;，进化为 &lt;strong&gt;多平台接入 + 多智能体可插拔&lt;/strong&gt; 的网关，并新增聊天隔离、配对放行与 WebUI 仪表盘。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="功能特性"&gt;功能特性
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;远程控制&lt;/strong&gt;: 用手机上的聊天机器人操作本机智能体&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多平台&lt;/strong&gt;: 飞书/Lark、Telegram、QQ 官方机器人，可同时启用任意组合&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多智能体&lt;/strong&gt;: 可插拔后端（&lt;code&gt;claude&lt;/code&gt;、&lt;code&gt;cursor&lt;/code&gt;、&lt;code&gt;pi&lt;/code&gt;、&lt;code&gt;opencode&lt;/code&gt; 等），用 &lt;code&gt;/agents&lt;/code&gt; 按聊天指定默认智能体&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;聊天隔离&lt;/strong&gt;: 每个聊天/频道独立子进程，消息互不串线&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;配对放行&lt;/strong&gt;: 可在 WebUI 中批准新聊天后再允许使用（建议开启）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WebUI&lt;/strong&gt;: 浏览器管理会话、配对、设置与实时事件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;目录工具&lt;/strong&gt;: &lt;code&gt;/ll&lt;/code&gt;（飞书为交互卡片，Telegram/QQ/WebUI 为文本列表）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;守护进程&lt;/strong&gt;: &lt;code&gt;start&lt;/code&gt; / &lt;code&gt;stop&lt;/code&gt; / &lt;code&gt;restart&lt;/code&gt; / &lt;code&gt;log&lt;/code&gt;，端口绑定保证单实例&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="架构设计"&gt;架构设计
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;用户 (飞书/Lark) &amp;lt;--&amp;gt; cc-gateway 守护进程 &amp;lt;--&amp;gt; 本地智能体 CLI
用户 (Telegram) &amp;lt;--&amp;gt; cc-gateway 守护进程 &amp;lt;--&amp;gt; claude / cursor / pi / …
用户 (QQ) &amp;lt;--&amp;gt; cc-gateway 守护进程
用户 (WebUI) &amp;lt;--&amp;gt; cc-gateway 守护进程
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;网关以子进程方式拉起各 provider CLI，并桥接聊天消息。不同智能体使用各自的通信协议：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;智能体&lt;/th&gt;
 &lt;th&gt;协议&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Claude Code&lt;/td&gt;
 &lt;td&gt;stream-json（stdio）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Cursor / OpenCode&lt;/td&gt;
 &lt;td&gt;ACP&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Pi&lt;/td&gt;
 &lt;td&gt;JSON-RPC&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="快速开始"&gt;快速开始
&lt;/h2&gt;&lt;h3 id="安装"&gt;安装
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;macOS / Linux&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fsSL https://raw.githubusercontent.com/caixy-plus/cc-gateway/main/install.sh | sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装过程会执行 &lt;code&gt;cc-gateway init&lt;/code&gt;、重启守护进程，并输出文档链接。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;irm https&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt;//raw.githubusercontent.com/caixy-plus/cc-gateway/main/scripts/install-irm.ps1 | iex
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;从源码构建&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/caixy-plus/cc-gateway.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd cc-gateway
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./install_local.sh &lt;span style="color:#75715e"&gt;# macOS/Linux：构建 WebUI 并安装到 ~/.local/bin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Windows: .\install_local.ps1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="初始化配置"&gt;初始化配置
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cc-gateway init
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也可在 &lt;code&gt;cc-gateway start&lt;/code&gt; 后通过 WebUI &lt;strong&gt;设置&lt;/strong&gt; 或编辑 &lt;code&gt;~/.cc-gateway/config.json&lt;/code&gt;。按需启用机器人：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;平台&lt;/th&gt;
 &lt;th&gt;配置项&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;飞书 / Lark&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;feishu.enabled&lt;/code&gt;、&lt;code&gt;app_id&lt;/code&gt;、&lt;code&gt;app_secret&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Telegram&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;telegram.enabled&lt;/code&gt;、&lt;code&gt;bot_token&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;QQ&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;qq.enabled&lt;/code&gt;、&lt;code&gt;app_id&lt;/code&gt;、&lt;code&gt;app_secret&lt;/code&gt;、&lt;code&gt;sandbox&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;将 &lt;code&gt;default_dir&lt;/code&gt; 设为远程用户可浏览的工作区根目录（如 &lt;code&gt;~/Workspace&lt;/code&gt;）。多个平台可同时运行。&lt;/p&gt;
&lt;h3 id="启动与使用"&gt;启动与使用
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cc-gateway start &lt;span style="color:#75715e"&gt;# 启动守护进程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cc-gateway webui &lt;span style="color:#75715e"&gt;# 打开 WebUI（配对、设置、会话）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cc-gateway stop &lt;span style="color:#75715e"&gt;# 停止&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配对后，在 WebUI 输入框或飞书/Telegram/QQ 中用 &lt;code&gt;/agent&lt;/code&gt; 即可开始对话。&lt;/p&gt;
&lt;h2 id="命令参考"&gt;命令参考
&lt;/h2&gt;&lt;h3 id="cli-命令"&gt;CLI 命令
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;命令&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cc-gateway&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;显示帮助（同 &lt;code&gt;--help&lt;/code&gt;）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cc-gateway init&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;交互式配置向导（含可选机器人凭证）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cc-gateway start&lt;/code&gt; / &lt;code&gt;stop&lt;/code&gt; / &lt;code&gt;restart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;启停/重启守护进程&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cc-gateway status&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;查看守护进程状态&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cc-gateway log [-f] [-n 100]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;查看日志（&lt;code&gt;-f&lt;/code&gt; 跟踪）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cc-gateway webui&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在浏览器打开 WebUI（未运行时会先 start）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cc-gateway webui-token [--refresh]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;查看或重新生成 WebUI 访问令牌&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cc-gateway enable&lt;/code&gt; / &lt;code&gt;disable&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;开关开机自启（launchd / systemd 用户服务）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cc-gateway update [-y]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;检查并安装最新发布版&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cc-gateway uninstall&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;卸载二进制与服务项&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="网关命令聊天内"&gt;网关命令（聊天内）
&lt;/h3&gt;&lt;p&gt;在 WebUI 及已接入的机器人中可用（若开启配对须先放行）：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;命令&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/help&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;显示命令列表&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/quit&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;结束当前智能体会话&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/cd &amp;lt;路径&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;更改工作目录&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/cd_default&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;恢复为 &lt;code&gt;default_dir&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/agent [provider] [参数...]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;启动或重启智能体会话&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/agents [provider]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;设置本频道默认智能体&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/agent-history [n]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;列出最近会话；按序号恢复&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/pwd&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;显示当前工作目录&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/ll&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;选择目录（飞书卡片 / 文本列表）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/mkdir &amp;lt;名称&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;创建目录&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/show-thinking&lt;/code&gt; / &lt;code&gt;/hide-thinking&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;开关 Thinking 输出&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/stop&lt;/code&gt; / &lt;code&gt;/clear&lt;/code&gt; / &lt;code&gt;/status&lt;/code&gt; / &lt;code&gt;/esc&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;控制当前生成（视平台支持）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;

 &lt;blockquote&gt;
 &lt;p&gt;执行 &lt;code&gt;/agent&lt;/code&gt; 后，普通文本会转发给智能体；网关命令仍可使用。&lt;code&gt;/quit&lt;/code&gt; 结束当前会话。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="技术栈"&gt;技术栈
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;组件&lt;/th&gt;
 &lt;th&gt;技术&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;语言&lt;/td&gt;
 &lt;td&gt;Rust 2021 Edition&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;异步运行时&lt;/td&gt;
 &lt;td&gt;Tokio&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CLI 框架&lt;/td&gt;
 &lt;td&gt;Clap v4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HTTP / WebSocket&lt;/td&gt;
 &lt;td&gt;Reqwest（rustls） / Tokio-Tungstenite&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;序列化&lt;/td&gt;
 &lt;td&gt;Serde + Prost（protobuf）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;持久化&lt;/td&gt;
 &lt;td&gt;SQLite（rusqlite，内置打包）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;并发状态&lt;/td&gt;
 &lt;td&gt;DashMap（聊天隔离）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;可插拔后端&lt;/td&gt;
 &lt;td&gt;async-trait&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;日志&lt;/td&gt;
 &lt;td&gt;Tracing&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="飞书配置"&gt;飞书配置
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;前往&lt;a class="link" href="https://open.feishu.cn" target="_blank" rel="noopener"
 &gt;飞书开放平台&lt;/a&gt;创建应用&lt;/li&gt;
&lt;li&gt;启用&amp;quot;机器人&amp;quot;能力&lt;/li&gt;
&lt;li&gt;添加 &lt;code&gt;im.message.receive_v1&lt;/code&gt; 事件，选择 WebSocket 长连接模式&lt;/li&gt;
&lt;li&gt;将 &lt;code&gt;app_id&lt;/code&gt; 和 &lt;code&gt;app_secret&lt;/code&gt; 复制到配置文件中&lt;/li&gt;
&lt;li&gt;将应用安装到工作区&lt;/li&gt;
&lt;/ol&gt;

 &lt;blockquote&gt;
 &lt;p&gt;更多机器人（Telegram / QQ）与配置细节见仓库 &lt;code&gt;docs/&lt;/code&gt; 下的中英双语文档。项目采用 MIT 协议开源，由 Cai Xin Yun 开发。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>AI 指导棋 (ai-gobang)</title><link>https://caixy.xin/posts/ai-gobang/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://caixy.xin/posts/ai-gobang/</guid><description>&lt;p&gt;&lt;strong&gt;项目地址&lt;/strong&gt;: &lt;a class="link" href="https://github.com/caixy-plus/ai-gobang" target="_blank" rel="noopener"
 &gt;https://github.com/caixy-plus/ai-gobang&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;AI 指导棋是一款面向围棋爱好者的智能教学应用。&lt;/p&gt;
&lt;p&gt;&lt;img alt="AI 指导棋截图" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://caixy.xin/images/ai-gobang-screenshot.png"&gt;核心体验是：&lt;strong&gt;用户与 AI 对弈或自战解说时，获得像人类高段棋手一样的实时指导、赛后复盘和互动问答&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="技术亮点"&gt;技术亮点
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;KataGo&lt;/strong&gt;（v1.16.4，Metal GPU）提供围棋局面分析、胜率、选点、变化图&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大模型&lt;/strong&gt;（脑池 API）将 KataGo 的数值分析翻译为自然语言教学&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flutter&lt;/strong&gt; 跨平台客户端（macOS / iOS / Android / Windows）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spring Boot&lt;/strong&gt; 服务端，部署在本地 K8s（OrbStack）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="功能规划"&gt;功能规划
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;阶段&lt;/th&gt;
 &lt;th&gt;功能&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Phase 1（MVP）&lt;/td&gt;
 &lt;td&gt;人机对弈（KataGo 执黑/白）、基础棋盘 UI、落子同步、SGF 导入导出&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Phase 2（实时指导）&lt;/td&gt;
 &lt;td&gt;对弈中 AI 提示（胜率条、推荐选点、简短评语）、用户主动请求提示&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Phase 3（复盘+对话）&lt;/td&gt;
 &lt;td&gt;赛后胜率曲线、关键失误/好手标注、自然语言复盘报告、对话式问答&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Phase 4（课程）&lt;/td&gt;
 &lt;td&gt;死活题/定式题库、AI 出题、作答点评、进度追踪&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="项目结构"&gt;项目结构
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;ai-gobang/
├── admin/ # 管理后台
├── backend/ # Spring Boot 服务端
├── mobile/ # 移动端
├── docs/ # 设计文档
├── deploy/ # 部署配置
└── start.sh # 启动脚本
&lt;/code&gt;&lt;/pre&gt;
 &lt;blockquote&gt;
 &lt;p&gt;项目采用 MIT 协议开源，欢迎 Star 和贡献。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>Brain Think (头脑风暴)</title><link>https://caixy.xin/posts/brain-think/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://caixy.xin/posts/brain-think/</guid><description>&lt;p&gt;&lt;strong&gt;项目地址&lt;/strong&gt;: &lt;a class="link" href="https://github.com/caixy-plus/brain-think" target="_blank" rel="noopener"
 &gt;https://github.com/caixy-plus/brain-think&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;app_plat&lt;/code&gt; OAuth + 脑池 AI API 的端到端验证应用。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Brain Think 截图" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://caixy.xin/images/brain-think-screenshot.png"&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;子项目&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;server/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Spring Boot 3.2 + Java 21 服务端（OAuth 回调编排、脑池转发、会话/对话存储）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;client/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Flutter 跨平台客户端（macOS / Windows / Android / iOS）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="整体流程"&gt;整体流程
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;Flutter brain-think server (:9080) app_plat backend (:8080) app_plat frontend (:3000)
 │ │
 │ 1) 打开 InAppWebView，加载 /oauth/authorize?client_id=…&amp;amp;redirect_uri=brainthink://callback
 │ │
 │ 2) 用户在 WebView 中：登录 ⇄ 同意授权 │
 │ 3) 同意页 GET /v1/oauth/authorize → {code} │
 │ 4) window.location = brainthink://callback?code=xxx │
 │ │
 │ 5) WebView 拦截 brainthink:// → 提取 code │
 │ 6) POST /api/auth/exchange {code} │
 │ │ │
 │ │ 7) POST /v1/oauth/token {clientId, clientSecret, code, …} │
 │ │ ← {accessToken, refreshToken} │
 │ │ 落库 user_session、签 brain-think 自家 JWT 返回 │
 │ ← {sessionToken} │ │
 │ │
 │ 8) POST /api/chat/send Bearer btJwt {message} │
 │ │ 9) POST /v1/brain/chat/completions X-API-Key: dev-key-2024 │
 │ │ ← {choices:[{message:{content}}]} │
 │ ← {reply} │ │
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="前置准备"&gt;前置准备
&lt;/h2&gt;&lt;h3 id="1-启动-app_plat端口冲突自查"&gt;1. 启动 app_plat（端口冲突自查）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd /Users/caixinyun/Workspace/app_plat
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker compose up -d &lt;span style="color:#75715e"&gt;# PG :5433、Redis :6380&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd backend &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./mvnw spring-boot:run &amp;amp; &lt;span style="color:#75715e"&gt;# :8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd ../frontend &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run dev &amp;amp; &lt;span style="color:#75715e"&gt;# :3000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;brain-think 需要 frontend 跑起来——它承载补齐的 &lt;code&gt;/auth/login&lt;/code&gt; 和 &lt;code&gt;/oauth/authorize&lt;/code&gt; 同意页（已在 app_plat 中创建）。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="2-控制台注册-oauth-应用"&gt;2. 控制台注册 OAuth 应用
&lt;/h3&gt;&lt;p&gt;浏览器打开 &lt;code&gt;http://localhost:3000/console/applications&lt;/code&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;应用名：&lt;code&gt;brain-think&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;redirect_uris：必须包含 &lt;code&gt;brainthink://callback&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;创建后记下 &lt;code&gt;clientId&lt;/code&gt; / &lt;code&gt;clientSecret&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-脑池-api-key"&gt;3. 脑池 API Key
&lt;/h3&gt;&lt;p&gt;脑池目前仅校验 &lt;code&gt;naochi.api-keys&lt;/code&gt; 配置（默认包含 &lt;code&gt;dev-key-2024&lt;/code&gt;），开发期可直接用默认值；生产可通过控制台 &lt;code&gt;/console/api-keys&lt;/code&gt; 创建后再把它加到 app_plat 的 &lt;code&gt;application.yml&lt;/code&gt; 里。&lt;/p&gt;
&lt;h2 id="跑-brain-think"&gt;跑 brain-think
&lt;/h2&gt;&lt;h3 id="服务端"&gt;服务端
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd server
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export PLATFORM_CLIENT_ID&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&amp;lt;填上&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export PLATFORM_CLIENT_SECRET&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&amp;lt;填上&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export PLATFORM_BRAIN_API_KEY&lt;span style="color:#f92672"&gt;=&lt;/span&gt;dev-key-2024
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export BT_JWT_SECRET&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;openssl rand -hex 32&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export JAVA_HOME&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;/usr/libexec/java_home -v 21&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mvn spring-boot:run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;健康检查：&lt;code&gt;curl http://localhost:9080/api/health&lt;/code&gt; → &lt;code&gt;{&amp;quot;code&amp;quot;:0,&amp;quot;data&amp;quot;:{&amp;quot;status&amp;quot;:&amp;quot;UP&amp;quot;}}&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="客户端"&gt;客户端
&lt;/h3&gt;&lt;p&gt;编辑 &lt;code&gt;client/lib/config.dart&lt;/code&gt;，把 &lt;code&gt;kOAuthClientId&lt;/code&gt; 改为上一步注册得到的 &lt;code&gt;clientId&lt;/code&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd client
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flutter pub get
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flutter run -d macos &lt;span style="color:#75715e"&gt;# 或 windows / iOS / Android&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;Android 模拟器：把 &lt;code&gt;kBrainThinkBaseUrl&lt;/code&gt; 与 &lt;code&gt;kPlatformWebBase&lt;/code&gt; 中的 &lt;code&gt;localhost&lt;/code&gt; 换成 &lt;code&gt;10.0.2.2&lt;/code&gt;。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="端到端验证"&gt;端到端验证
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;brain-think 启动 → SplashPage → LoginPage（嵌入 WebView 加载 &lt;code&gt;/oauth/authorize&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;WebView 跳到 &lt;code&gt;app_plat&lt;/code&gt; 登录页，输入账号密码&lt;/li&gt;
&lt;li&gt;回到同意页，点&amp;quot;同意授权&amp;quot;&lt;/li&gt;
&lt;li&gt;WebView URL 变成 &lt;code&gt;brainthink://callback?code=…&lt;/code&gt;，被拦截&lt;/li&gt;
&lt;li&gt;自动跳到 ChatPage&lt;/li&gt;
&lt;li&gt;输入&amp;quot;你好&amp;quot;，2~5 秒收到 AI 回复&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="单点验证curl"&gt;单点验证（cURL）
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;server/README.md&lt;/code&gt; 的&amp;quot;故障排查&amp;quot;可对照排错。最小手动 cURL 链：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# A) 登录拿 user JWT（app_plat）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;USER_TOKEN&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;curl -s -X POST http://localhost:8080/api/v1/user/auth/login &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -H &lt;span style="color:#e6db74"&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -d &lt;span style="color:#e6db74"&gt;&amp;#39;{&amp;#34;email&amp;#34;:&amp;#34;alice@example.com&amp;#34;,&amp;#34;password&amp;#34;:&amp;#34;yourpass&amp;#34;}&amp;#39;&lt;/span&gt; | jq -r &lt;span style="color:#e6db74"&gt;&amp;#39;.data.accessToken&amp;#39;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# B) 拿 code&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CODE&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;curl -s &lt;span style="color:#e6db74"&gt;&amp;#34;http://localhost:8080/api/v1/oauth/authorize?client_id=&lt;/span&gt;$CID&lt;span style="color:#e6db74"&gt;&amp;amp;redirect_uri=brainthink://callback&amp;amp;scope=read&amp;amp;state=test&amp;#34;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -H &lt;span style="color:#e6db74"&gt;&amp;#34;Authorization: Bearer &lt;/span&gt;$USER_TOKEN&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; | jq -r &lt;span style="color:#e6db74"&gt;&amp;#39;.data.code&amp;#39;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# C) 换 token&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -X POST http://localhost:8080/api/v1/oauth/token &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -H &lt;span style="color:#e6db74"&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -d &lt;span style="color:#e6db74"&gt;&amp;#34;{\&amp;#34;clientId\&amp;#34;:\&amp;#34;&lt;/span&gt;$CID&lt;span style="color:#e6db74"&gt;\&amp;#34;,\&amp;#34;clientSecret\&amp;#34;:\&amp;#34;&lt;/span&gt;$CSE&lt;span style="color:#e6db74"&gt;\&amp;#34;,\&amp;#34;code\&amp;#34;:\&amp;#34;&lt;/span&gt;$CODE&lt;span style="color:#e6db74"&gt;\&amp;#34;,\&amp;#34;grantType\&amp;#34;:\&amp;#34;authorization_code\&amp;#34;}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# D) 脑池&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -X POST http://localhost:8080/api/v1/brain/chat/completions &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -H &lt;span style="color:#e6db74"&gt;&amp;#39;X-API-Key: dev-key-2024&amp;#39;&lt;/span&gt; -H &lt;span style="color:#e6db74"&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -d &lt;span style="color:#e6db74"&gt;&amp;#39;{&amp;#34;model&amp;#34;:&amp;#34;mimo-v2-pro&amp;#34;,&amp;#34;messages&amp;#34;:[{&amp;#34;role&amp;#34;:&amp;#34;user&amp;#34;,&amp;#34;content&amp;#34;:&amp;#34;hi&amp;#34;}]}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="app_plat-这次顺手补齐"&gt;app_plat 这次顺手补齐
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;文件&lt;/th&gt;
 &lt;th&gt;内容&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;frontend/src/app/auth/login/page.tsx&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;用户登录页（OAuth 同意页未登录时跳转过来）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;frontend/src/app/oauth/authorize/page.tsx&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;OAuth 同意页（替后端做 302 跳到 redirect_uri）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Extreme Metronome - 极致全平台节拍器</title><link>https://caixy.xin/posts/metronome/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://caixy.xin/posts/metronome/</guid><description>&lt;p&gt;&lt;strong&gt;项目地址&lt;/strong&gt;: &lt;a class="link" href="https://github.com/caixy-plus/metronome" target="_blank" rel="noopener"
 &gt;https://github.com/caixy-plus/metronome&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;微秒级精度节拍器 | 一套代码 · 五端覆盖 | 零漂移计时&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="功能预览"&gt;功能预览
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;特性&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;微秒级精度&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Stopwatch 绝对时间戳补偿，长期运行零漂移&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;六端全覆盖&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;iOS / Android / Web / Windows / macOS 一套代码&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;感官同步&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;UI 闪烁先于音频，利用人脑听觉滞后实现物理级对齐&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;音效池&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;5 套音效原子切换，内置音量标准化补偿&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;防御式编程&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;全局 null 检查、过期回调检测、资源自动释放&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="支持的平台"&gt;支持的平台
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: center"&gt;iOS&lt;/th&gt;
 &lt;th style="text-align: center"&gt;Android&lt;/th&gt;
 &lt;th style="text-align: center"&gt;macOS&lt;/th&gt;
 &lt;th style="text-align: center"&gt;Windows&lt;/th&gt;
 &lt;th style="text-align: center"&gt;Web&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;✅&lt;/td&gt;
 &lt;td style="text-align: center"&gt;✅&lt;/td&gt;
 &lt;td style="text-align: center"&gt;✅&lt;/td&gt;
 &lt;td style="text-align: center"&gt;✅&lt;/td&gt;
 &lt;td style="text-align: center"&gt;✅*&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Web 需首次点击解锁音频（浏览器自动播放策略限制）&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="快速开始"&gt;快速开始
&lt;/h2&gt;&lt;h3 id="安装"&gt;安装
&lt;/h3&gt;&lt;p&gt;下载对应平台的安装包：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;macOS&lt;/strong&gt;: &lt;a class="link" href="./release/Metronome.dmg" &gt;Metronome.dmg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt;: &lt;a class="link" href="./release/Metronome.msi" &gt;Metronome.msi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Web&lt;/strong&gt;: 访问 &lt;a class="link" href="https://caixy-plus.github.io/metronome" target="_blank" rel="noopener"
 &gt;caixy-plus.github.io/metronome&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="从源码构建"&gt;从源码构建
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 克隆仓库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/caixy-plus/metronome.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd metronome
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 安装依赖&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flutter pub get
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 运行（开发模式）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flutter run
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 构建发布版&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flutter build macos &lt;span style="color:#75715e"&gt;# macOS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flutter build windows &lt;span style="color:#75715e"&gt;# Windows&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flutter build apk &lt;span style="color:#75715e"&gt;# Android&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flutter build web &lt;span style="color:#75715e"&gt;# Web&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="构建指南"&gt;构建指南
&lt;/h2&gt;&lt;h3 id="平台要求"&gt;平台要求
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;平台&lt;/th&gt;
 &lt;th style="text-align: left"&gt;要求&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;macOS&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Flutter SDK + Xcode&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;Windows&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Flutter SDK + Visual Studio&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;Android&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Flutter SDK + Android SDK&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;Web&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Flutter SDK + Chrome&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="web-首次使用"&gt;Web 首次使用
&lt;/h3&gt;&lt;p&gt;Web 浏览器有自动播放限制，首次打开会显示 &lt;strong&gt;&amp;ldquo;TAP TO START&amp;rdquo;&lt;/strong&gt; 解锁界面，点击屏幕任意位置即可启用节拍音效。&lt;/p&gt;
&lt;h2 id="架构设计"&gt;架构设计
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;┌─────────────────────────────────────────────┐
│ UI Layer │
│ MetronomeProvider │
│ (BPM 逻辑 + 高精度计时) │
└──────────────────────┬──────────────────────┘
 │ implements
┌──────────────────────▼──────────────────────┐
│ AudioServiceInterface │
│ (统一播放协议：init / play) │
└──────────────────────┬──────────────────────┘
 │ conditional export
 ┌────────────┴────────────┐
 ▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ audio_service_ │ │ audio_service_ │
│ native.dart │ │ web.dart │
│ (flutter_soloud) │ │ (HTML5 Audio) │
└──────────────────┘ └──────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="目录结构"&gt;目录结构
&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;lib/
├── main.dart # 应用入口
├── models/ # 数据模型
│ ├── metronome_settings.dart # BPM、节拍配置
│ └── sound_type.dart # 音效类型枚举
├── providers/ # 状态管理
│ └── metronome_provider.dart # 核心计时逻辑
├── screens/ # 页面
│ ├── home_screen/ # 主页面（含子组件）
│ │ ├── home_screen.dart
│ │ ├── play_button.dart
│ │ ├── help_dialog.dart
│ │ └── settings_bottom_sheet.dart
│ └── settings_screen.dart # 设置页面
├── widgets/ # 通用组件
│ ├── beat_indicator.dart # 节拍指示器
│ ├── beat_type_selector.dart # 节拍类型选择器
│ ├── bpm_dial.dart # BPM 旋钮
│ └── sound_type_tile.dart # 音效类型磁贴
└── utils/ # 工具类
 ├── audio_service.dart # 条件导出入口
 ├── audio_service_native.dart # Native 音频实现
 ├── audio_service_web.dart # Web 音频实现
 ├── dynamic_island_service.dart # iOS Dynamic Island
 ├── notification_service.dart # 后台通知
 └── volume_utils.dart # 音量工具
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="音效资源"&gt;音效资源
&lt;/h2&gt;&lt;h3 id="目录结构-1"&gt;目录结构
&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;assets/sounds/{folder_name}/
├── click_high.wav # 重拍（强音）
└── click_low.wav # 轻拍（弱音）
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="支持的音效"&gt;支持的音效
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;音效&lt;/th&gt;
 &lt;th style="text-align: left"&gt;folder&lt;/th&gt;
 &lt;th style="text-align: left"&gt;特点&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;经典机械音&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;mechanical&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;清脆短促，古典首选&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;电子合成音&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;electronic&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;80年代风格&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;鼓机音效&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;drum&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;现代动感&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;木鱼/梆子&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;woodblock&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;最高穿透力&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;人声倒数&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;voice&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;直观友好&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;: Flutter 不支持目录递归注册，新增音效包需在 &lt;code&gt;pubspec.yaml&lt;/code&gt; 中显式声明。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="音频规格"&gt;音频规格
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;要求&lt;/th&gt;
 &lt;th style="text-align: left"&gt;规格&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;格式&lt;/td&gt;
 &lt;td style="text-align: left"&gt;16-bit PCM WAV&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;采样率&lt;/td&gt;
 &lt;td style="text-align: left"&gt;44100 Hz&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;启动延迟&lt;/td&gt;
 &lt;td style="text-align: left"&gt;0 ms&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="常见问题"&gt;常见问题
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Q: Windows 没有声音？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;检查日志是否包含以下输出：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[AudioService] [Windows] 初始化音频引擎...
[AudioService] [Windows] 成功加载音效包
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Q: Web 没有声音？&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;确认显示 &amp;ldquo;TAP TO START&amp;rdquo; 界面&lt;/li&gt;
&lt;li&gt;点击屏幕任意位置解锁音频&lt;/li&gt;
&lt;li&gt;查看日志 &lt;code&gt;[AudioService] Web 初始化完成&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="贡献"&gt;贡献
&lt;/h2&gt;&lt;p&gt;欢迎提交 Issue 和 Pull Request！&lt;/p&gt;
&lt;h2 id="许可协议"&gt;许可协议
&lt;/h2&gt;&lt;p&gt;本项目基于 &lt;a class="link" href="./LICENSE" &gt;MIT License&lt;/a&gt; 开源。&lt;/p&gt;</description></item><item><title>iKindle - 电子书阅读平台</title><link>https://caixy.xin/posts/ikindle/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://caixy.xin/posts/ikindle/</guid><description>&lt;p&gt;&lt;strong&gt;项目地址&lt;/strong&gt;: &lt;a class="link" href="https://github.com/caixy-plus/ikindle" target="_blank" rel="noopener"
 &gt;https://github.com/caixy-plus/ikindle&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;iKindle 是一个功能完整的电子书阅读平台，支持电子书管理、多端阅读、书架管理、订单支付与数据同步。&lt;/p&gt;
&lt;p&gt;&lt;img alt="iKindle 截图" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://caixy.xin/images/ikindle-screenshot.png"&gt;&lt;/p&gt;
&lt;h2 id="技术架构"&gt;技术架构
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;组件&lt;/th&gt;
 &lt;th&gt;技术栈&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;后端&lt;/td&gt;
 &lt;td&gt;Java 21 + Spring Boot 3.2.3 + PostgreSQL + Redis + QueryDSL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PC 前端&lt;/td&gt;
 &lt;td&gt;React 18 + TypeScript + Ant Design&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;移动端&lt;/td&gt;
 &lt;td&gt;Flutter（iOS / Android / macOS / Windows）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;管理后台&lt;/td&gt;
 &lt;td&gt;Node.js + React&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;认证&lt;/td&gt;
 &lt;td&gt;JWT Token&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="核心功能"&gt;核心功能
&lt;/h2&gt;&lt;h3 id="书籍管理"&gt;书籍管理
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;电子书分类管理（Category）、标签管理（Tag）&lt;/li&gt;
&lt;li&gt;热门书籍、推荐书籍、最新书籍智能推荐&lt;/li&gt;
&lt;li&gt;支持关键词搜索、价格区间筛选、分类浏览&lt;/li&gt;
&lt;li&gt;书籍发布/下架管理（Admin）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="用户系统"&gt;用户系统
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;用户注册/登录（JWT 认证）&lt;/li&gt;
&lt;li&gt;个人书架管理（UserBookshelf）&lt;/li&gt;
&lt;li&gt;阅读进度同步（SyncTask）&lt;/li&gt;
&lt;li&gt;角色权限管理（Role、Permission、Menu）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="订单与支付"&gt;订单与支付
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;电子书购买订单（Order、OrderItem）&lt;/li&gt;
&lt;li&gt;账户充值订单（RechargeOrder）&lt;/li&gt;
&lt;li&gt;账户余额管理（Account、AccountTransaction）&lt;/li&gt;
&lt;li&gt;支付回调处理&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="管理后台"&gt;管理后台
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;用户管理、书籍管理、订单管理&lt;/li&gt;
&lt;li&gt;系统配置（SystemConfig）、数据字典（Dict）&lt;/li&gt;
&lt;li&gt;权限菜单配置&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="项目结构"&gt;项目结构
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;ikindle/
├── backend/ # Spring Boot 后端（:8082）
│ └── com/ikindle/
│ ├── controller/ # REST API（Book, User, Order, Account...）
│ ├── service/ # 业务逻辑层
│ ├── repository/ # JPA + QueryDSL 数据访问
│ ├── entity/ # 实体类（Book, User, Order...）
│ └── dto/ # MapStruct DTO 转换
├── mobile/ # Flutter 多端应用
│ ├── features/ # 功能模块（书籍浏览、阅读器、书架...）
│ ├── shared/ # 共享组件
│ └── core/ # 核心配置（路由、状态管理）
├── admin/ # Node.js 管理后台
└── docs/ # 部署文档
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="api-设计"&gt;API 设计
&lt;/h2&gt;&lt;p&gt;所有 API 以 &lt;code&gt;/api/&lt;/code&gt; 为前缀，统一返回 &lt;code&gt;ApiResponse&amp;lt;T&amp;gt;&lt;/code&gt; 格式：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;code&amp;#34;&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;message&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;success&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;data&amp;#34;&lt;/span&gt;: { &lt;span style="color:#960050;background-color:#1e0010"&gt;...&lt;/span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;timestamp&amp;#34;&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1715587200000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="公开接口"&gt;公开接口
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/books&lt;/code&gt; — 书籍列表（支持分页、搜索、筛选）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/books/hot&lt;/code&gt; — 热门书籍&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/books/recommended&lt;/code&gt; — 推荐书籍&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/books/latest&lt;/code&gt; — 最新书籍&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /api/users/register&lt;/code&gt; — 用户注册&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /api/users/login&lt;/code&gt; — 用户登录&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="认证接口"&gt;认证接口
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/users/**&lt;/code&gt; — 用户信息管理&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/bookshelf/**&lt;/code&gt; — 书架管理&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /api/orders/**&lt;/code&gt; — 订单创建与支付&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="快速开始"&gt;快速开始
&lt;/h2&gt;&lt;h3 id="环境要求"&gt;环境要求
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Java&lt;/strong&gt;: JDK 21+&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;: 16.2+（数据库：&lt;code&gt;ikindle&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redis&lt;/strong&gt;: 7.2.4+&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node.js&lt;/strong&gt;: 20.11.1+（管理后台）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="启动后端"&gt;启动后端
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd ikindle/backend
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mvn compile &lt;span style="color:#75715e"&gt;# 编译并生成 QueryDSL Q 类&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mvn spring-boot:run &lt;span style="color:#75715e"&gt;# 启动后端（:8082）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="启动移动端"&gt;启动移动端
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd ikindle/mobile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flutter pub get
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flutter run &lt;span style="color:#75715e"&gt;# 运行 Flutter 应用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="测试账号"&gt;测试账号
&lt;/h2&gt;&lt;p&gt;系统启动后自动种子数据：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;管理员&lt;/strong&gt;: admin / admin123&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;普通用户&lt;/strong&gt;: test / test123&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="技术亮点"&gt;技术亮点
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;QueryDSL&lt;/strong&gt;: 类型安全的动态查询，避免 SQL 拼接&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MapStruct&lt;/strong&gt;: 编译期 DTO/Entity 转换，零反射开销&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;统一响应&lt;/strong&gt;: &lt;code&gt;ApiResponse&amp;lt;T&amp;gt;&lt;/code&gt; 包装所有 API 返回&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JWT 认证&lt;/strong&gt;: 无状态认证，支持移动端和 Web 端&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多端同步&lt;/strong&gt;: SyncTask 实现阅读进度跨设备同步&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;权限控制&lt;/strong&gt;: &lt;code&gt;@PreAuthorize&lt;/code&gt; 注解实现方法级权限校验&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;项目采用 MIT 协议开源，由 Cai Xin Yun 开发。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>PortProcess - 跨平台端口管理工具</title><link>https://caixy.xin/posts/portprocess/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://caixy.xin/posts/portprocess/</guid><description>&lt;p&gt;&lt;strong&gt;项目地址&lt;/strong&gt;: &lt;a class="link" href="https://github.com/caixy-plus/PortProcess" target="_blank" rel="noopener"
 &gt;https://github.com/caixy-plus/PortProcess&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PortProcess 是一款基于 Flutter 构建的跨平台端口管理工具，支持 macOS、Windows 和 Linux。&lt;/p&gt;
&lt;p&gt;&lt;img alt="PortProcess 截图" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://caixy.xin/images/portprocess-screenshot.png"&gt;&lt;/p&gt;
&lt;h2 id="功能特性"&gt;功能特性
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;实时进程监控&lt;/strong&gt; - 自动列出所有绑定端口的本地进程&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;智能搜索&lt;/strong&gt; - 按端口号、PID 或进程名过滤进程&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;一键终止&lt;/strong&gt; - 单击终止进程（带确认提示）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;原生系统集成&lt;/strong&gt; - UI 颜色与系统主题色无缝融合&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自动刷新&lt;/strong&gt; - 进程列表每 5 秒自动刷新&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自定义标题栏&lt;/strong&gt; - 所有平台统一的现代窗口样式&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="支持平台"&gt;支持平台
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;平台&lt;/th&gt;
 &lt;th&gt;文件格式&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;macOS (Universal)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.dmg&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Windows (x86_64)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.msi&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Linux (x86_64)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.tar.gz&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="快速开始"&gt;快速开始
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 克隆仓库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/caixy-plus/PortProcess.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd PortProcess
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 安装依赖&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flutter pub get
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 运行应用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flutter run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="技术架构"&gt;技术架构
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;lib/
├── main.dart # 应用入口
├── models/
│ └── process_info.dart # 进程数据模型
├── services/
│ └── process_service.dart # 平台特定的进程获取
└── screens/
 └── home_screen.dart # 主界面
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="各平台支持的命令"&gt;各平台支持的命令
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;平台&lt;/th&gt;
 &lt;th&gt;列出端口&lt;/th&gt;
 &lt;th&gt;终止进程&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;macOS&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;lsof&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;kill -9&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ss&lt;/code&gt; / &lt;code&gt;netstat&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;kill -9&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Windows&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;netstat&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;taskkill&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="自动发布"&gt;自动发布
&lt;/h2&gt;&lt;p&gt;推送版本标签即可触发 GitHub Actions 自动构建：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git tag v1.0.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git push origin v1.0.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;项目采用 MIT 协议开源，由 Cai Xin Yun 开发。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>SuperAsync - 通用异步任务调度平台</title><link>https://caixy.xin/posts/super-async/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://caixy.xin/posts/super-async/</guid><description>&lt;p&gt;&lt;strong&gt;项目地址&lt;/strong&gt;: &lt;a class="link" href="https://github.com/caixy-plus/super-async" target="_blank" rel="noopener"
 &gt;https://github.com/caixy-plus/super-async&lt;/a&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;通用异步任务调度平台 —— 高吞吐、低延迟、可水平扩展的分布式任务调度与执行框架。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="项目介绍"&gt;项目介绍
&lt;/h2&gt;&lt;p&gt;SuperAsync 是一个面向生产环境的通用异步任务调度平台，支持两种执行模式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Server 本地模式&lt;/strong&gt;：调度器与执行器同进程，适合单机高吞吐场景。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Worker 远程模式&lt;/strong&gt;：调度器通过 HTTP 向独立 Worker 分发任务，支持水平扩展。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;核心特性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PostgreSQL + FOR UPDATE SKIP LOCKED&lt;/strong&gt;：原生支持高并发任务抢占，无需额外消息队列。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;任务优先级 + 延迟调度&lt;/strong&gt;：支持优先级队列与精确到毫秒的延迟执行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自动重试 + 超时监控&lt;/strong&gt;：失败自动退避重试，超时任务自动回滚。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;定时任务（Cron）&lt;/strong&gt;：内置 Cron 表达式解析，支持秒级精度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工作流引擎（DAG）&lt;/strong&gt;：支持基于 DAG 的复杂任务编排（Beta）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spring Boot 自动装配&lt;/strong&gt;：一行配置即可接入现有项目。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="架构概览"&gt;架构概览
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────┐
│ SuperAsync Server │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ Task Submit │──▶│ PostgreSQL │◀──│ Task Polling │ │
│ │ REST API │ │ async_tasks │ │ Scheduler(5s) │ │
│ └─────────────┘ └──────────────┘ └─────────────────┘ │
│ │ ▲ │ │
│ │ │ ▼ │
│ │ ┌──────────────┐ ┌──────────┐ │
│ │ │ ScheduledJob │ │ Executor │ │
│ │ │ Engine │ │ Engine │ │
│ │ └──────────────┘ └──────────┘ │
│ │ │ │
│ ┌──────▼────────────────────────────────────────────▼───┐ │
│ │ REST API: /v1/worker/poll │ │
│ │ REST API: /v1/worker/complete │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
 ▲
 │ HTTP
┌─────────────────────────────────────────────────────────────┐
│ SuperAsync Worker (SDK) │
│ ┌──────────────┐ ┌─────────────────┐ ┌─────────────┐ │
│ │ Poll Loop │──▶│ SuperAsyncWorker │──▶│ Handler │ │
│ │ (3s/100ms) │ │ Registry │ │ @SuperAsync │ │
│ └──────────────┘ └─────────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="调度流程"&gt;调度流程
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;客户端通过 &lt;code&gt;TaskDispatcher.submit()&lt;/code&gt; 将任务写入 &lt;code&gt;async_tasks&lt;/code&gt; 表（状态 &lt;code&gt;PENDING&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;本地模式&lt;/strong&gt;：&lt;code&gt;TaskPollingScheduler&lt;/code&gt; 定期轮询 &lt;code&gt;PENDING&lt;/code&gt; 任务（默认 5s，可配置），调用 &lt;code&gt;TaskExecutorEngine&lt;/code&gt; 在线程池中执行。任务提交后会&lt;strong&gt;即时触发一次轮询&lt;/strong&gt;，消除等待延迟。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Worker 模式&lt;/strong&gt;：&lt;code&gt;SuperAsyncWorkerEngine&lt;/code&gt; 定期 HTTP 轮询 &lt;code&gt;/v1/worker/poll&lt;/code&gt;，抢到任务后在本机线程池执行，结果通过 &lt;code&gt;/v1/worker/complete&lt;/code&gt; 回写。支持&lt;strong&gt;批量抢锁&lt;/strong&gt;（一次 HTTP 拉取多条任务）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;定时任务&lt;/strong&gt;：&lt;code&gt;JobSchedulerEngine&lt;/code&gt; 定期扫描 &lt;code&gt;scheduled_jobs&lt;/code&gt; 表（默认 10s，可配置），触达时间的任务会生成对应的 &lt;code&gt;async_task&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="快速开始"&gt;快速开始
&lt;/h2&gt;&lt;h3 id="1-环境准备"&gt;1. 环境准备
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Java 21+&lt;/li&gt;
&lt;li&gt;Maven 3.8+&lt;/li&gt;
&lt;li&gt;PostgreSQL 14+（本地测试可用 Docker 一键启动）&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 启动 PostgreSQL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run -d --name superasync-pg &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e POSTGRES_DB&lt;span style="color:#f92672"&gt;=&lt;/span&gt;superasync &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e POSTGRES_USER&lt;span style="color:#f92672"&gt;=&lt;/span&gt;superasync &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e POSTGRES_PASSWORD&lt;span style="color:#f92672"&gt;=&lt;/span&gt;superasync &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -p 5432:5432 postgres:16-alpine
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-编译安装"&gt;2. 编译安装
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/caixy-plus/super-async.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd super-async
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mvn clean install -DskipTests
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3-启动-server"&gt;3. 启动 Server
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd super-async-server
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mvn spring-boot:run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Server 默认启动在 &lt;code&gt;http://localhost:8080&lt;/code&gt;，自动执行 Flyway 迁移创建表结构。&lt;/p&gt;
&lt;h3 id="4-运行性能测试"&gt;4. 运行性能测试
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd super-async-benchmark
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mvn spring-boot:run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;测试完成后会在控制台输出 Markdown 格式的性能报告。&lt;/p&gt;
&lt;h2 id="接入指南"&gt;接入指南
&lt;/h2&gt;&lt;h3 id="server-本地模式"&gt;Server 本地模式
&lt;/h3&gt;&lt;p&gt;在业务服务中引入 &lt;code&gt;super-async-server&lt;/code&gt;，通过 &lt;code&gt;@TaskHandler&lt;/code&gt; 注解注册本地执行器：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; com.superasync.annotation.TaskHandler;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; com.superasync.dto.TaskContext;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; com.superasync.dto.TaskResult;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; org.springframework.stereotype.Component;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;@Component&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;OrderTaskHandler&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@TaskHandler&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;ORDER_PAYMENT&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; TaskResult &lt;span style="color:#a6e22e"&gt;handlePayment&lt;/span&gt;(TaskContext ctx) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; String orderId &lt;span style="color:#f92672"&gt;=&lt;/span&gt; ctx.&lt;span style="color:#a6e22e"&gt;getPayload&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 执行业务逻辑&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; TaskResult.&lt;span style="color:#a6e22e"&gt;ok&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;paid&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;提交任务：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; com.superasync.dto.TaskRequest;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; com.superasync.dto.Priority;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; com.superasync.service.TaskDispatcher;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;@Service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;OrderService&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@Autowired&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;private&lt;/span&gt; TaskDispatcher taskDispatcher;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;createOrder&lt;/span&gt;(String orderId) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TaskRequest request &lt;span style="color:#f92672"&gt;=&lt;/span&gt; TaskRequest.&lt;span style="color:#a6e22e"&gt;builder&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;taskType&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;ORDER_PAYMENT&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;taskKey&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;order_&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; orderId)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;payload&lt;/span&gt;(orderId)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;priority&lt;/span&gt;(Priority.&lt;span style="color:#a6e22e"&gt;HIGH&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;delay&lt;/span&gt;(Duration.&lt;span style="color:#a6e22e"&gt;ofSeconds&lt;/span&gt;(30)) &lt;span style="color:#75715e"&gt;// 30s 后执行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;timeout&lt;/span&gt;(Duration.&lt;span style="color:#a6e22e"&gt;ofMinutes&lt;/span&gt;(5))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;maxRetry&lt;/span&gt;(3)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;build&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; taskDispatcher.&lt;span style="color:#a6e22e"&gt;submit&lt;/span&gt;(request);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="worker-远程模式"&gt;Worker 远程模式
&lt;/h3&gt;&lt;p&gt;在独立 Worker 服务中引入 &lt;code&gt;super-async-sdk&lt;/code&gt;：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 配置 &lt;code&gt;application.yml&lt;/code&gt;：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;superasync&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;worker&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;enabled&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;worker-id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;worker-node-1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;server-url&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;http://localhost:8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;core-pool-size&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;poll-interval-ms&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;3000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;tags&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;PAYMENT_WORKER&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2. 编写 Worker 处理器：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; com.superasync.dto.TaskContext;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; com.superasync.dto.TaskResult;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; com.superasync.worker.annotation.SuperAsyncWorker;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; org.springframework.stereotype.Component;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;@Component&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;PaymentWorker&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@SuperAsyncWorker&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;ORDER_PAYMENT&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; TaskResult &lt;span style="color:#a6e22e"&gt;handle&lt;/span&gt;(TaskContext ctx) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 执行业务逻辑&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; TaskResult.&lt;span style="color:#a6e22e"&gt;ok&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;done&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;3. 提交时指定 workerTag：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;TaskRequest request &lt;span style="color:#f92672"&gt;=&lt;/span&gt; TaskRequest.&lt;span style="color:#a6e22e"&gt;builder&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;taskType&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;ORDER_PAYMENT&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;taskKey&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;order_&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; orderId)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;payload&lt;/span&gt;(orderId)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;workerTag&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;PAYMENT_WORKER&amp;#34;&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// 指定由该标签的 Worker 执行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;build&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;taskDispatcher.&lt;span style="color:#a6e22e"&gt;submit&lt;/span&gt;(request);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="性能测试报告"&gt;性能测试报告
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;测试环境：MacBook Pro (Apple Silicon, 8C), Java 21, PostgreSQL 16 (Docker)&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="测试结果"&gt;测试结果
&lt;/h3&gt;&lt;h4 id="简单任务延迟测试-worker模式-手动驱动"&gt;简单任务延迟测试 (Worker模式-手动驱动)
&lt;/h4&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;指标&lt;/th&gt;
 &lt;th&gt;数值&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;平均延迟&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;253.00 ms&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;P50 延迟&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;245 ms&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;P95 延迟&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;434 ms&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;P99 延迟&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;489 ms&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="简单任务吞吐量测试-本地模式-手动驱动"&gt;简单任务吞吐量测试 (本地模式-手动驱动)
&lt;/h4&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;指标&lt;/th&gt;
 &lt;th&gt;数值&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;平均延迟&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;34.30 ms&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;P50 延迟&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;33 ms&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;P95 延迟&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;54 ms&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;P99 延迟&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;76 ms&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;吞吐量&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;3937 tasks/s&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="万级任务吞吐量测试-本地模式-手动驱动"&gt;万级任务吞吐量测试 (本地模式-手动驱动)
&lt;/h4&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;指标&lt;/th&gt;
 &lt;th&gt;数值&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;提交任务数&lt;/td&gt;
 &lt;td&gt;10,000&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;完成任务数&lt;/td&gt;
 &lt;td&gt;10,000&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;失败任务数&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;总耗时&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;1.93 s&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;吞吐量&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;5186.72 tasks/s&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;平均延迟&lt;/td&gt;
 &lt;td&gt;348.42 ms&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;P50 延迟&lt;/td&gt;
 &lt;td&gt;376 ms&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;P95 延迟&lt;/td&gt;
 &lt;td&gt;483 ms&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;P99 延迟&lt;/td&gt;
 &lt;td&gt;493 ms&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;最大延迟&lt;/td&gt;
 &lt;td&gt;702 ms&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="结果分析"&gt;结果分析
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;本地模式延迟&lt;/strong&gt;：通过&lt;strong&gt;即时调度（eager poll）&lt;/strong&gt;，任务提交后毫秒级触发 &lt;code&gt;pollAndDispatch&lt;/code&gt;，P50 达到 &lt;strong&gt;33ms&lt;/strong&gt;，具备百毫秒级调度能力。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Worker 模式延迟&lt;/strong&gt;：通过&lt;strong&gt;批量抢锁&lt;/strong&gt;（一次 HTTP 拉取 10 条任务），HTTP 往返次数减少 90%，P50 达到 &lt;strong&gt;245ms&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;万级吞吐&lt;/strong&gt;：1 分钟内提交 10,000 条任务，系统在 &lt;strong&gt;1.93 秒&lt;/strong&gt;内全部完成，峰值吞吐达 &lt;strong&gt;5186 tasks/s&lt;/strong&gt;，零失败。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="模块说明"&gt;模块说明
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;super-async/
├── super-async-sdk/ # 客户端 SDK + Worker 运行时
│ ├── SuperAsyncClient # HTTP 客户端（提交任务、注册定时任务）
│ ├── SuperAsyncWorkerEngine # Worker 轮询与执行引擎
│ └── @SuperAsyncWorker # Worker 处理器注解
├── super-async-server/ # 调度服务端
│ ├── TaskPollingScheduler # 本地任务轮询调度器
│ ├── TaskExecutorEngine # 本地任务执行引擎
│ ├── JobSchedulerEngine # 定时任务调度引擎
│ ├── WorkflowEngine # DAG 工作流引擎
│ └── REST API # 任务管理 + Worker 通信接口
└── super-async-benchmark/ # 性能测试与接入示例
 ├── BenchmarkOrchestrator # 多场景测试编排器
 ├── BenchmarkTaskController# 双模式任务处理器示例
 └── BenchmarkReport # 性能指标与报告生成
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="开源协议"&gt;开源协议
&lt;/h2&gt;&lt;p&gt;本项目基于 &lt;a class="link" href="LICENSE" &gt;Apache License 2.0&lt;/a&gt; 开源。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：SuperAsync 目前处于积极开发阶段，API 可能在正式 1.0 发布前发生变动。生产环境使用前建议进行充分压测与容错验证。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item></channel></rss>