OpenNOW架构揭秘:Qt Quick + Rust双进程设计如何抛弃Electron重写GeForce NOW客户端
OpenNOW架构揭秘Qt Quick Rust双进程设计如何抛弃Electron重写GeForce NOW客户端【免费下载链接】OpenNOWCustom GeForce Now Client Named OpenNOW项目地址: https://gitcode.com/gh_mirrors/op/OpenNOWOpenNOW 是一款开源的 GeForce NOW 桌面客户端它在 1.0.0 版本中彻底抛弃了 Electron改用Qt Quick Rust 双进程架构重建整个应用Qt Quick 负责界面呈现Rust 负责账号服务与云游戏串流。这套设计让 OpenNOW 成为真正原生的 GeForce NOW 客户端——没有内嵌浏览器、没有独立视频窗口视频帧始终留在 GPU 上。本文将带你拆解这个架构是如何落地的。为什么抛弃 Electron传统 Electron 应用的代价众所周知内存占用高——每个应用都拖着一个完整的 Chromium视频体验差——云游戏的 H.265/AV1 视频必须走浏览器解码管线帧路径长、延迟高平台能力受限——手柄热插拔、指针锁定、DRM 级 GPU 互操作很难在 Web 技术栈里做到位。OpenNOW 的官方迁移文档 docs/qt-migration.md 明确记录了这次断舍离Electron 应用及其构建工具链已被整体删除Qt/原生技术栈是唯一支持的桌面入口且没有 Chromium/WebRTC 兜底。新架构可以用一句话概括出自迁移文档的目标架构章节Qt Quick/QML 外壳 - 轻量 Qt/C 桥接 - 进程内链接的 Rust 串流运行时 - 版本化的 OpenNOW core RPC - Rust 应用服务独立进程第一层Qt Quick 外壳——只管画Qt Quick/QML 层拥有全部呈现职责动效、空间焦点、响应式布局和无障碍交互。规则非常严格——它不得接触 GFN 协议细节、凭据、文件系统访问或串流传输见 docs/qt-migration.md。这种职责隔离带来两个直观体验双布局同应用键鼠桌面布局和手柄主机风布局跑在同一个程序里QML 的焦点系统负责手柄导航️视频上方直接叠菜单串流进行中打开菜单、看延迟统计不会离开视频画面。第二层Rust 核心进程——账号与云游戏会话的管家OpenNOW 的 Rust 核心native/opennow-core/运行在独立进程中由 Qt 通过QProcess拉起双方走标准输入输出通信通信协议是换行分隔的 UTF-8 JSON单行上限 1 MiB首条消息永远是core.hello版本握手版本不匹配直接熔断详见 docs/core-protocol.mdQt 侧的进程管理实现在 CoreClient.cpp包括崩溃检测与自动重启逻辑。这个核心进程集中托管了全部脏活累活从 native/opennow-core/src/main.rs 的模块清单可以一目了然模块职责gfn/cloudmatchGeForce NOW GraphQL 请求、云游戏会话分配credential_vault系统级安全凭据存储DPAPI/Keychain/Secret Servicesettings/store_cache配置持久化、商店目录缓存updater/update_apply签名更新发现、原子安装与回滚persistent_storage云存档挂载管理请求全部带唯一 ID、截止时限和取消机制核心端最多 8 个 RPC 工作线程超限返回busy并由 Qt 指数退避重试——这套有界队列 类型化错误设计正是原生应用区别于 Electron 事件总线的气质所在。第三层Rust 串流引擎——视频永不离开 GPU串流端是独立的 Rust workspacenative/opennow-streamer/按职责拆成多个 crate见 native/opennow-streamer/README.mdopennow-streamer-transport——NVST 传输Mjolnir SRTP 视频专用套接字 ICE/DTLS/SCTP 音频/输入包opennow-streamer-platform-*——Windows/MacOS/Linux 各自的硬解与 GPU 纹理产出opennow-streamer-ffi——进程内 C ABI由 Qt 以动态库形式加载。关键是最后一点串流引擎不是子进程而是链接进 Qt 进程的共享库。GPU 协作流程README 第 39–49 行Qt 把当前 QRhi 图形设备对象借给 Rust 运行时Rust 解码后把帧发布到单帧 mailbox丢旧帧策略Qt 拿到不透明帧令牌把转换/同步录进同一个命令缓冲StreamVideoItem在场景图中采样纹理QML 菜单自然叠在视频之上。全程没有子 HWND、没有 swapchain、没有第二个窗口——这就是抛弃 Electron 后能做到的延迟与内存优势。FFI 的所有权与线程模型细节可看 opennow-streamer-ffi/README.md。对普通玩家意味着什么⚡更快更省无 Chromium 常驻内存应用负载在 Linux 检查点中约 26 MiBqt-migration.md更低延迟NVST 原生传输 平台硬解H.264/H.265/AV1失败时安全降级手柄原生支持SDL3 直连手柄热插拔主机布局开箱即用安全隔离凭据存系统密钥库QML 层根本接触不到敏感数据。项目还配有 48 项外壳测试、74 个 Rust 核心单元测试及逐平台的验收清单docs/qt-acceptance.md质量门槛相当严格。动手探索仓库地图速查想深入源码从这几个入口进opennow-qt/ —— Qt Quick 桌面应用与 C 桥接QML 组件在 qml/components/native/opennow-core/ —— Rust 应用核心账号/会话/设置服务native/opennow-streamer/ —— NVST 串流运行时与 Qt FFIdocs/core-protocol.md —— 壳/核 JSON 协议完整规范docs/qt-migration.md —— 从 Electron 到 Qt 的完整迁移历程locales/ —— 多语言翻译英文源 Crowdin 管理需要自己编译时安装 Qt 6.8、CMake 3.24、SDL3 和 Cargo然后按 README.md 中的 CMake 流程构建即可——全程不再需要 Node.js这本身就是告别 Electron最有力的证明。【免费下载链接】OpenNOWCustom GeForce Now Client Named OpenNOW项目地址: https://gitcode.com/gh_mirrors/op/OpenNOW创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

JSP+SSM网上服装销售系统毕业设计:从环境配置到部署避坑全流程

JSP+SSM网上服装销售系统毕业设计:从环境配置到部署避坑全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 3:04:22 阅读更多 →
把截图直接拖进对话框:Agent Client for Obsidian如何向AI智能体发送图片与文件

把截图直接拖进对话框:Agent Client for Obsidian如何向AI智能体发送图片与文件

把截图直接拖进对话框:Agent Client for Obsidian如何向AI智能体发送图片与文件 【免费下载链接】obsidian-agent-client Bring AI agents into Obsidian via Agent Client Protocol (ACP), such as Claude Code, Codex and Gemini CLI. 项目地址: https://gitcod…

2026/10/4 3:04:22 阅读更多 →
如何一文看懂自主AI研究:awesome-autoresearch带你完整入门Karpathy autoresearch生态

如何一文看懂自主AI研究:awesome-autoresearch带你完整入门Karpathy autoresearch生态

如何一文看懂自主AI研究:awesome-autoresearch带你完整入门Karpathy autoresearch生态 【免费下载链接】awesome-autoresearch A curated list of autonomous improvement loops, research agents, and autoresearch-style systems inspired by Karpathys autoresea…

2026/10/4 3:04:22 阅读更多 →

最新新闻

Python中ord()与chr()实现ASCII码与字母互转完全指南

Python中ord()与chr()实现ASCII码与字母互转完全指南

1. 为什么“字母 ↔ ascii码互转”看似简单,却总有人搞混先说明一个背景:我平时在技术群里经常看到有人问“Python怎么把字母转成数字”,或者“怎么把65变成A”。问题本身不难,但每次回答完之后,总有人接着问&#xff…

2026/10/4 3:35:50 阅读更多 →
OpenShell深度解析:Windows经典开始菜单替代工具实战指南

OpenShell深度解析:Windows经典开始菜单替代工具实战指南

1. 从"OpenShell"这个名字说起:它到底是个什么东西第一次看到"OpenShell"这个词,很多人会下意识地把它和"Shell"脚本、命令行终端联系起来。这个直觉不算错,但也不完全对。OpenShell在技术圈里其实指向一个非常…

2026/10/4 3:35:50 阅读更多 →
OpenShell实战:在Windows 11上找回经典开始菜单与资源管理器

OpenShell实战:在Windows 11上找回经典开始菜单与资源管理器

如果你和我一样,从 Win7/XP 时代一路用过来,拿到一台装好 Windows 11 的新电脑,第一件事多半不是体验新功能,而是想办法把开始菜单“变”回熟悉的模样。我手里的 OpenShell(原 Classic Shell),就…

2026/10/4 3:35:50 阅读更多 →
基于Spring Boot的家校互动管理系统:权限、数据与业务实现

基于Spring Boot的家校互动管理系统:权限、数据与业务实现

1. 为什么「家校互动」会成为毕业设计里的热门选题1.1 双减政策带来的业务变化我之前带过好几届学生的毕业设计,每年6月改论文那阵子,微信消息都是刷屏的。今年明显发现一个问题:做管理系统的学生,选题越来越往「教育服务」这个方…

2026/10/4 3:35:50 阅读更多 →
QuickBooks Online 自动化实战:基于 awesome-claude-skills 的 Rube MCP 发票与客户管理技能

QuickBooks Online 自动化实战:基于 awesome-claude-skills 的 Rube MCP 发票与客户管理技能

AI 技能AI 插件人工智能工作流自动化 【免费下载链接】awesome-claude-skills A curated list of awesome Claude Skills, resources, and tools for customizing Claude AI workflows 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-claude-skills 点击…

2026/10/4 3:35:49 阅读更多 →
基于 Spring Boot 的考研交流互助平台设计与实现

基于 Spring Boot 的考研交流互助平台设计与实现

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 1. 项目背景与意义 随着考研人数的逐年增长,考生在备考过程中普遍面临信息获取困难、复习资料分散、经验交流渠道有限等问题。传统的考研交流方式主要依赖线…

2026/10/4 3:34:49 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →