基于Tauri+React的跨平台桌面应用开发:架构设计与打包实战

news2026/5/3 6:35:26
1. 项目概述WhereClaw 是什么WhereClaw 是一个基于 Tauri 框架构建的跨平台桌面应用程序。简单来说它提供了一个现代化的图形用户界面GUI而其核心功能则由一个名为whereclaw-engine的运行时引擎驱动。这个项目结构在当前的桌面应用开发中越来越常见前端负责交互和展示后端引擎负责处理核心逻辑和计算两者通过 Tauri 提供的安全、高效的通信机制进行交互。这个项目特别吸引我的地方在于它的“开箱即用”理念。它不是一个需要你额外去配置复杂后端服务或依赖特定云环境的工具。开发者将whereclaw-engine直接打包进了应用本身这意味着最终用户下载到的就是一个完整的、可以独立运行的软件包。这对于需要处理本地数据、注重隐私或需要在离线环境下工作的应用场景来说是一个非常重要的设计选择。从技术栈来看前端选择了 React这是一个拥有庞大生态和社区支持的现代前端框架非常适合构建复杂的交互界面。后端则用 Rust 编写Tauri 的核心是 Rust确保了应用在性能和安全上的优势。这种组合让 WhereClaw 既能拥有媲美 Web 应用的流畅界面和开发体验又能获得原生应用级别的系统资源访问能力和执行效率。2. 核心架构与设计思路拆解2.1 为什么选择 Tauri React 的组合在桌面应用开发领域我们有过多种技术路径。早期的纯原生开发如 C/Win32, Objective-C/Cocoa性能最好但跨平台成本极高。后来的 Electron 用 Web 技术HTML/CSS/JS统一了界面开发极大地降低了跨平台门槛但其将整个 Chromium 浏览器打包进去导致应用体积庞大、内存占用高。Tauri 的出现提供了一种新的平衡。它使用操作系统的原生 WebView在 macOS 上是 WebKit在 Windows 上是 WebView2在 Linux 上是 WebKitGTK来渲染界面而不是捆绑一个完整的浏览器。这意味着应用体积显著减小一个简单的“Hello World”应用Electron 打包后可能超过 100MB而 Tauri 可以控制在 10MB 以内。对于 WhereClaw 这样还要捆绑一个引擎的应用减少外壳的体积尤为重要。内存占用更低共享系统的 WebView 运行时避免了每个应用都独享一个浏览器进程的内存开销。安全性增强Tauri 的前后端通信建立在严格的 IPC进程间通信安全模型之上前端代码运行在沙盒中对系统资源的访问必须通过 Rust 后端显式暴露的 API这大大减少了攻击面。性能更优核心逻辑用 Rust 编写可以直接调用系统 API性能远超 JavaScript。选择 React 作为前端框架则是看中了其组件化、声明式UI和强大的状态管理生态。对于需要复杂状态流转和数据展示的桌面应用React 配合像 Zustand 或 Valtio 这样的轻量级状态库能很好地组织代码。Tauri 提供了tauri-apps/api包让前端可以像调用普通异步函数一样调用后端 Rust 暴露的命令command集成非常顺畅。2.2 捆绑式引擎Bundled Engine的设计考量项目文档中多次提到“bundledwhereclaw-engineruntime”这是一个关键设计。通常类似架构的应用可能会选择让用户单独下载引擎或者在首次运行时动态下载。WhereClaw 选择了直接捆绑我认为主要基于以下几点考虑简化部署和用户体验用户只需下载一个文件或安装包无需关心额外的依赖或配置步骤。双击即可运行符合大多数桌面软件用户的预期。版本一致性保证应用界面和引擎版本被严格绑定在一起避免了因用户手动更新引擎导致的前后端 API 不兼容问题。离线可用性引擎是应用的一部分意味着所有功能在完全离线的环境下也能正常工作。安全性控制开发者可以严格控制引擎的版本和来源避免了从不可信源下载引擎可能带来的安全风险。当然这种设计的代价是应用分发包的体积会增大因为包含了引擎。但考虑到现代存储空间和网络带宽以及 Tauri 本身在精简体积上的优势这个代价对于追求稳定和易用的产品来说是值得的。从构建脚本prepare:openclaw-engine可以看出引擎的准备工作是平台特定的这要求开发者在为不同操作系统打包前需要先准备好对应平台的引擎二进制文件。2.3 跨平台打包策略解析WhereClaw 明确支持 macOSApple Silicon 和 Intel、Windows x64 和 Linux x64 四个目标平台。它的打包策略体现了务实和灵活的原则本地脚本驱动项目提供了针对每个平台的独立打包脚本位于scripts/目录下而不是依赖一个复杂的、统一的构建系统。这种方式虽然看起来不够“自动化”但实际中更可控。每个脚本可以针对该平台的特点进行定制化处理比如处理签名、处理路径格式、调用特定的打包工具链等。禁用 GitHub Actions 自动构建文档明确指出“GitHub Actions auto build is disabled”。这通常意味着项目可能依赖一些本地环境、特定证书或大型的、不便放在 CI 中的依赖比如这个whereclaw-engine。手动在目标机器上执行打包能确保环境完全正确也便于调试打包过程中出现的平台相关问题。产物管理清晰所有打包脚本都将最终产物输出到release-artifacts/platform/目录下。这种约定优于配置的方式让开发者能清晰地知道从哪里获取构建结果也便于编写后续的发布或测试脚本。3. 开发环境搭建与核心工作流3.1 初始化与依赖安装开始贡献代码或进行二次开发的第一步是搭建环境。根据文档步骤非常标准# 克隆项目后进入项目根目录 npm install这条命令会读取package.json文件安装所有前端相关的依赖包括 React、Tauri 的 JavaScript API 包、各种开发工具如 Vite如果 Tauri 项目使用它的话等。这里有一个潜在的注意点Tauri 项目除了前端的npm依赖还有 Rust 后端的依赖。幸运的是Tauri 的 CLI 工具在后续步骤中会自动处理 Rust 端的依赖通过 Cargo所以通常不需要开发者手动运行cargo build。注意确保你的系统已经安装了 Rust 工具链。可以通过rustc --version检查。如果未安装Tauri 官网推荐使用https://rustup.rs/上的脚本来安装这是最方便的方式它会同时安装rustc、cargo和rustup。3.2 开发模式运行安装好依赖后就可以启动开发服务器了npm run tauri dev这个命令背后做了很多事情它会启动一个前端开发服务器例如基于 Vite负责热重载HMR你的 React 组件和样式。同时它会编译 Rust 后端代码并启动 Tauri 应用窗口将这个窗口连接到前端开发服务器。你在前端代码中的修改会实时反映在应用窗口中而修改 Rust 后端代码通常需要重启应用但 Tauri 也支持部分热重载。这是最高效的开发方式你可以同时获得 Web 前端开发的快速迭代体验和完整的桌面应用运行环境。3.3 引擎运行时的准备这是 WhereClaw 项目特有的一个关键步骤。在开发或打包前你需要确保whereclaw-engine这个核心组件就位。npm run prepare:openclaw-engine这个npm script具体做了什么需要查看项目package.json中的定义。它很可能执行了一个脚本去检查或下载对应你当前开发平台的whereclaw-engine二进制文件并将其放置到 Tauri 应用能够访问的特定目录例如src-tauri/bin/或src-tauri/target/下的某个位置。对于 Windows 用户文档特别给出了 PowerShell 的命令npm run prepare:openclaw-engine:windows这暗示了引擎的准备过程可能是平台相关的甚至可能需要不同的工具链或脚本。一个非常重要的实操心得是如果你在开发过程中修改了whereclaw-engine的代码并重新编译了它你必须手动将其复制到应用期望的位置或者重新运行这个准备脚本。否则应用运行时加载的仍然是旧的引擎版本可能导致功能异常且难以调试。建议将这个步骤加入到你的开发检查清单中。4. 多平台打包实战与细节剖析WhereClaw 的打包不是通过一条通用命令完成的而是为每个平台提供了独立的脚本。这种设计虽然增加了维护成本但带来了极高的灵活性和对平台特殊性的处理能力。4.1 macOS 打包 (package-macos-arm64.sh/package-macos-x64.sh)在 macOS 上分发应用代码签名和公证Notarization是两大门槛。代码签名确保应用来自可识别的开发者且未被篡改公证是苹果的一项安全服务用于检查软件是否包含恶意内容没有公证的应用在较新系统上运行会遇到警告甚至被阻止。根据项目 Notes 所述“macOS packaging scripts perform ad-hoc re-signing so the app bundle is structurally valid, but they do not notarize the app.” 这句话信息量很大Ad-hoc 重签名Ad-hoc 签名是一种不需要苹果开发者证书的签名方式它只保证应用在签名后结构完整并且能在当前机器上运行但不能用于分发。脚本进行 Ad-hoc 重签名很可能是为了修复 Tauri 构建出的.app包在结构上的一些小问题使其成为一个“格式正确”的 macOS 应用包。但这不是用于发布的正式签名。不进行公证这意味着打包出来的.app或.dmg文件用户首次打开时会看到“无法验证开发者”的警告需要在“系统设置”-“隐私与安全性”中手动点击“仍要打开”。这对于内部测试、早期预览版或开源项目是常见的做法。如果要进行正式分发需要集成苹果的公证流程这通常需要苹果开发者账号每年99美元和自动化脚本如xcrun notarytool。打包流程推测脚本很可能依次执行了以下操作运行npm run tauri build或cargo tauri build生成未签名的应用包。使用codesign命令对应用包内的特定二进制文件如whereclaw-engine和最终的.app进行 Ad-hoc 签名。将签名后的应用包打包成.dmg磁盘映像文件或直接输出.app。将最终产物复制到release-artifacts/macos-arm64/或release-artifacts/macos-x64/目录。4.2 Windows 打包 (package-windows-x64.ps1)Windows 平台的打包相对直接但也有一些选择。Notes 提到“Windows packaging currently produces a portable.zipbundle instead of an installer.”便携式 ZIP 包这意味着打包脚本生成的是一个包含所有依赖的文件夹然后将其压缩成.zip文件。用户解压后直接运行其中的.exe文件即可。这种方式对用户非常友好无需安装也便于绿色携带。但它缺少了安装程序的一些功能如创建开始菜单快捷方式、注册文件关联、安装到 Program Files 目录等。替代方案Tauri 本身支持通过nsis或wixtools生成.msi安装包。项目未来可能会增加这个选项。对于 PowerShell 脚本它可能运行npm run tauri build在src-tauri/target/release/下生成.exe及其依赖。使用 PowerShell 的Compress-Archive命令将必要的文件.exe,resources,bin目录下的引擎等打包成.zip。将.zip文件输出到release-artifacts/windows-x64/。注意事项在 Windows 上如果你的应用需要管理员权限或访问特定系统资源需要在tauri.conf.json中正确配置bundle和security相关选项。便携式 ZIP 包通常以当前用户权限运行。4.3 Linux 打包 (package-linux-x64.sh)Linux 的桌面环境碎片化严重打包是最具挑战性的一环。Tauri 默认支持生成 AppImage这是一种将应用及其所有依赖打包成一个可执行文件的格式兼容大多数主流发行版。Notes 指出“Linux packaging assumes the required WebKit/AppImage dependencies are already installed on that machine.” 这是关键。系统依赖Tauri 的 Linux 构建需要系统安装有 WebKit2GTK 开发库和appimagetool等工具。脚本不会帮你安装它们。常见的依赖安装命令如下以 Ubuntu/Debian 为例sudo apt update sudo apt install -y libwebkit2gtk-4.0-dev \ build-essential \ curl \ wget \ file \ libssl-dev \ libgtk-3-dev \ libayatana-appindicator3-dev \ librsvg2-dev # 安装 appimagetool wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage chmod ax appimagetool-x86_64.AppImage sudo mv appimagetool-x86_64.AppImage /usr/local/bin/appimagetool打包脚本工作Linux 脚本很可能检查必要的系统工具是否存在。运行npm run tauri build生成 AppImage 所需的文件结构。调用appimagetool将目录打包成最终的.AppImage文件。将.AppImage输出到release-artifacts/linux-x64/。一个常见的坑在不同的 Linux 发行版上构建的 AppImage其兼容性可能不同。理论上 AppImage 是跨发行版的但如果构建时链接了某个发行版特有的库版本可能在另一个发行版上运行失败。因此最好在一个比较基础、古老的发行版如 Ubuntu 18.04或 Docker 容器内进行构建以提高兼容性。5. 持续集成与发布流程建议虽然项目禁用了 GitHub Actions 自动构建但文档给出了一个清晰的 CI 发布流程思路“Run the platform-specific script on each target machine to build local release artifacts.” 这本质上是一种基于“构建农场”或“多机”的手动 CI。5.1 手动多平台发布流程对于小型团队或个人开发者可以遵循以下步骤准备构建机准备三台物理机或虚拟机分别安装纯净的 macOSIntel/ARM 可能需要两台、Windows 10/11 和 Ubuntu LTS。同步代码在每台机器上拉取相同的项目代码和 Git 标签对应要发布的版本。执行打包在每台机器上运行对应的打包脚本./scripts/package-*.sh或.ps1。收集产物打包完成后从每台机器的release-artifacts/platform/目录中取出构建好的应用包.dmg,.zip,.AppImage。集中发布将这些来自不同平台的产物统一上传到 GitHub Releases、公司内网文件服务器或产品下载页面。5.2 向自动化 CI 演进当项目成熟后可以考虑恢复或重建自动化 CI但需要解决引擎捆绑的问题。思路如下引擎作为构建产物将whereclaw-engine的跨平台编译纳入 CI。可以有一个单独的 CI 任务为三个平台编译引擎并将二进制文件作为“构建产物”Artifact发布。主应用 CI 下载引擎WhereClaw 应用的 CI 任务三个平台并行在开始时先从上游任务下载对应平台的引擎二进制文件放置到项目指定位置。执行打包然后运行npm run prepare:openclaw-engine此时它可能只是复制文件和npm run tauri build或直接运行项目提供的打包脚本。签名与公证可选在 CI 中集成 macOS 的代码签名和公证流程需要安全地存储开发者证书和 App Store Connect API 密钥以及 Windows 的代码签名需要 EV 证书或普通代码签名证书。发布最后将签名后的最终包自动上传到 GitHub Releases。这个过程需要精细的配置但一旦搭建完成就能实现“推送标签后自动生成所有平台已签名应用”的流畅体验。6. 常见问题与排查技巧实录在实际开发和打包 WhereClaw 这类项目时你可能会遇到一些典型问题。以下是我根据经验整理的排查清单6.1 开发运行时问题问题现象可能原因排查步骤与解决方案运行npm run tauri dev失败提示 Rust 相关错误。1. Rust 工具链未安装或损坏。2. 系统缺少 C 语言构建工具链如gcc。3. 项目 Rust 依赖下载失败网络问题。1. 运行rustc --version和cargo --version确认安装。使用rustup update更新。2. 在 macOS 安装 Xcode Command Line Tools (xcode-select --install)。在 Linux 安装build-essential。在 Windows 确保安装了 Visual Studio Build Tools 或 MSVC。3. 检查网络尝试更换 Cargo 源国内可考虑使用 ustc 或 rsproxy 镜像。应用窗口能打开但前端页面白屏或加载失败。1. 前端开发服务器未成功启动或端口冲突。2. Tauri 配置 (tauri.conf.json) 中的devPath指向错误。3. 前端构建存在错误。1. 查看命令行输出确认前端服务器 URL通常是http://localhost:1420。手动在浏览器中访问该 URL看是否能打开。2. 检查tauri.conf.json中build.devPath的配置是否与前端服务器地址一致。3. 检查终端中是否有前端编译错误如 TypeScript 错误。前端调用 Tauri API 时报错 “command not found”。1. 后端 Rust 中未定义对应的命令#[tauri::command]。2. 命令名拼写错误。3. 前端调用的 API 模块未正确导入。1. 检查src-tauri/src/main.rs或相关模块确认命令已正确定义并注册到Builder。2. 前后端对比命令名称确保完全一致包括大小写。3. 在前端代码中确认是从tauri-apps/api正确导入invoke。6.2 打包构建时问题问题现象可能原因排查步骤与解决方案打包脚本执行失败提示找不到引擎。prepare:openclaw-engine脚本未运行或运行失败。1. 在打包前务必先运行npm run prepare:openclaw-engine或平台特定脚本。2. 检查该脚本的执行日志看是否下载或复制失败。3. 手动检查引擎二进制文件是否出现在 Tauri 应用期望的路径下如src-tauri/bin/。macOS 打包后应用无法打开提示“已损坏”。未进行正确的代码签名或 Gatekeeper 拦截。1. 如果是开发测试可以尝试在终端执行sudo xattr -rd com.apple.quarantine /path/to/YourApp.app并输入密码然后再次打开。2. 或者在“系统设置”-“隐私与安全性”中找到并允许该应用。3. 如需正式签名需要配置有效的开发者证书并在打包脚本中使用codesign命令。Windows 打包的 ZIP 包运行时闪退。1. 缺少 Visual C 运行时库。2. 引擎二进制文件与系统架构不匹配如用了 32 位引擎。3. 应用路径包含中文或特殊字符。1. 尝试在目标机器安装最新的 Visual C Redistributable 。2. 确认打包脚本使用的是 x64 版本的引擎。3. 将应用解压到纯英文路径下再运行。使用 Process Monitor 等工具查看闪退时的系统调用错误。Linux 打包的 AppImage 在其他发行版上无法运行。1. 构建机 glibc 版本过高。2. 缺少必要的 FUSE 支持旧系统。3. 打包时包含了发行版特有的库。1. 尽量在较低版本的发行版如 Ubuntu 18.04或使用 Docker 官方 Tauri 构建镜像进行打包。2. 让用户尝试用--appimage-extract-and-run参数运行或安装libfuse2在基于 Ubuntu 22.04 的系统上可能需要。3. 使用linuxdeploy等工具检查并捆绑依赖。6.3 性能与调试技巧前端性能分析由于前端是 React可以使用 Chrome DevTools 的 Performance 和 React Developer Tools 的 Profiler 来定位渲染性能瓶颈。Tauri 开发模式下的应用同样支持这些开发者工具。后端 Rust 调试在tauri dev模式下Rust 后端的输出如println!或log宏会打印在启动应用的终端里这是最直接的调试方式。对于复杂问题可以使用rust-gdb或lldb进行调试。引擎通信优化如果whereclaw-engine执行耗时操作务必确保它在异步任务中运行避免阻塞 Tauri 的主线程这会导致界面卡顿。Tauri 的#[tauri::command]异步函数是处理这类问题的标准方式。资源路径问题在开发模式下前端资源通过 dev server 加载。在打包后资源被嵌入到二进制文件中。通过 Tauri 的path和fsAPI 访问本地文件时要特别注意路径的解析。使用tauri::api::path::resolve_path可以帮你正确处理应用目录、配置目录、文档目录等标准路径。7. 项目扩展与定制化思路基于 WhereClaw 现有的架构我们可以探讨几个可能的扩展方向这对于想要借鉴此项目进行二次开发的读者会很有帮助。7.1 替换或升级核心引擎whereclaw-engine是项目的核心。也许你想替换成自己的计算引擎或者升级到一个新版本。操作流程如下理解接口首先需要研究前端是如何与引擎交互的。查看src-tauri/src/下的 Rust 代码找到调用引擎的命令。引擎可能作为一个独立的可执行文件被调用通过std::process::Command也可能作为一个 Rust 库lib被链接。文档提到它是“bundled runtime”更可能是一个独立的二进制文件。构建新引擎为你所有的目标平台macOS ARM/x64, Windows x64, Linux x64编译你的新引擎。集成到项目修改prepare:openclaw-engine脚本或其调用的底层脚本使其指向你的新引擎构建产物并确保它能被正确复制到打包流程所需的位置。测试通信确保前端调用引擎的 API参数、返回值格式没有变化或者相应地更新前端和 Rust 桥接层的代码。7.2 增加新的平台支持目前项目支持三大主流桌面平台。如果你需要支持例如Linux ARM64如树莓派、苹果芯片 Mac 上的 Linux 虚拟机或Windows ARM64需要工具链确保 Rust 工具链和 Node.js 支持目标平台。对于 Rust使用rustup target add aarch64-unknown-linux-gnu等命令添加目标。Tauri 配置在tauri.conf.json的tauri.bundle.targets数组中添加新的目标如deb、appimage、msi等。引擎编译为新的目标平台编译whereclaw-engine。创建打包脚本参照现有的脚本编写针对新平台的打包脚本如package-linux-aarch64.sh处理可能存在的平台差异。系统依赖特别是 Linux需要确认目标系统是否有兼容的 WebKit2GTK 等运行时库。7.3 引入自动更新机制Tauri 官方提供了强大的自动更新功能。对于 WhereClaw由于捆绑了引擎更新时需要同时更新应用外壳和引擎。实现思路配置 Tauri 更新服务器在tauri.conf.json中配置updater端点指向一个可以发布更新元数据latest.json和安装包的文件服务器。构建更新包Tauri 的tauri updater package命令可以生成差分更新包.sig和.tar.gz文件或全量更新包。考虑到引擎可能变化较大全量更新可能更稳妥。发布流程每次发布新版本时除了生成各平台的安装包还需要为每个平台生成对应的更新包并上传到服务器同时更新latest.json文件。前端集成在应用内添加检查更新的 UI调用 Tauri 的tauri-apps/api/updaterAPI。当用户触发更新时Tauri 会自动下载、验证并安装更新包。这个功能可以极大提升用户体验但需要维护一个稳定的更新服务器和安全的签名密钥。7.4 界面与交互深化React 生态提供了无数可能。你可以考虑状态管理如果应用状态变得复杂可以引入 Zustand、Jotai 或 Redux Toolkit 来替代简单的useState。UI 组件库使用像 Mantine、Chakra UI、Ant Design 或 shadcn/ui 这样的组件库快速构建专业美观的界面。本地化使用i18next和react-i18next为应用添加多语言支持。无障碍访问确保应用对键盘导航和屏幕阅读器友好这不仅是道德要求在一些地区也是法律要求。WhereClaw 项目作为一个采用现代桌面开发技术栈Tauri React并集成独立引擎的实践提供了一个非常清晰和务实的范本。它没有过度设计而是通过明确的脚本和文档将复杂的跨平台打包问题分解为可管理的步骤。无论是学习 Tauri 开发还是构建类似架构的“外壳引擎”式应用这个项目都值得深入研究和借鉴。在实际操作中最关键的是理解其工作流开发时准备引擎、运行时隔离通信、打包时平台定制。把握住这几点就能灵活地将其模式应用到自己的项目中去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2577447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…