RhinoCompute 可以理解为“把 Rhino 的几何引擎放到 Web 服务后面”。客户端通过 HTTP 或 HTTPS 发送请求,服务端在无界面的 Rhino/Rhino.Inside 环境中执行几何计算、Grasshopper 求解或扩展端点逻辑,然后把 JSON 结果返回给客户端。
它适合以下场景:
| 名词 | 作用 |
|---|---|
| RhinoCommon | Rhino 的 .NET SDK。完整 Rhino 环境内可用,包含大量几何、文档、命令和插件能力。 |
| rhino3dm | 基于 openNURBS 的轻量库,用于读写 3dm 和构造基础几何。它不包含所有 RhinoCommon 运算。 |
| Rhino.Inside | 允许 Rhino 在另一个 64 位进程内运行的技术。Compute 依赖它启动无界面的 Rhino。 |
| compute.geometry | 实际执行几何和 Grasshopper 求解的 REST 服务。 |
| rhino.compute | 对外入口和服务管理层,负责认证、反向代理、子进程、超时、空闲关闭等。 |
| Hops | Grasshopper 客户端组件,用来把外部 Grasshopper 定义当成“函数”调用。 |
| Core-Hour Billing | 在 Windows Server 或 Linux Server 上运行 Compute 时使用的核心小时计费模型。 |
官方本地调试文档和当前源码都把 Compute 拆成两个核心工程:
compute.geometry 暴露 REST API,负责 Rhino 几何计算、Grasshopper 定义求解、自定义 Compute 端点。rhino.compute 是更高层入口,负责接收客户端请求、认证、启动多个 compute.geometry 子进程、转发请求、控制空闲关闭。典型请求链如下:
客户端 / Hops | | HTTP POST + RhinoComputeKey v rhino.compute | | 认证、路由、选择子进程、反向代理 v compute.geometry 子进程 | | Rhino.Inside 启动无界面 Rhino | RhinoCommon / Grasshopper / 插件逻辑 v JSON 结果
Compute 的端点可分为三类:
/version、/healthcheck、/activechildren、/sdk。RegisterComputeEndPoint 注册静态方法。RhinoCompute 是服务端。Hops 是 Grasshopper 里的客户端组件。
Hops 会读取另一个 Grasshopper 文件或 REST 端点的输入输出定义,把它表现成当前画布上的一个组件。求解时,Hops 把输入发送给本地或远程 Compute;Compute 在无界面的 Rhino/Grasshopper 环境里求解后返回结果。
这意味着:
Compute 更适合“输入一批几何/参数,输出一批结果”的无状态任务。每个请求都应尽量自包含:
如果业务必须维护会话状态,建议在 Compute 外层应用服务中管理,例如数据库、对象存储、任务队列、用户会话,再把单次几何计算请求交给 Compute。
浏览器 / CAD 平台 / 后台任务 | v 业务 API 服务 | 负责用户、权限、任务、文件、数据库 v RhinoCompute 服务 | 负责 Rhino/Grasshopper 几何求解 v 对象存储 / 数据库 / 日志监控
不要把 Compute 当成完整业务后端。它更像几何计算执行器。业务认证、文件上传、队列、重试、审计、限流、租户隔离,应由外层服务承担。
rhino.compute 和 compute.geometry 的区别?