目录

01 概念与架构

RhinoCompute 是什么

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 拆成两个核心工程:

典型请求链如下:

客户端 / Hops
  |
  | HTTP POST + RhinoComputeKey
  v
rhino.compute
  |
  | 认证、路由、选择子进程、反向代理
  v
compute.geometry 子进程
  |
  | Rhino.Inside 启动无界面 Rhino
  | RhinoCommon / Grasshopper / 插件逻辑
  v
JSON 结果

端点类型

Compute 的端点可分为三类:

Compute 与 Hops 的区别

RhinoCompute 是服务端。Hops 是 Grasshopper 里的客户端组件。

Hops 会读取另一个 Grasshopper 文件或 REST 端点的输入输出定义,把它表现成当前画布上的一个组件。求解时,Hops 把输入发送给本地或远程 Compute;Compute 在无界面的 Rhino/Grasshopper 环境里求解后返回结果。

这意味着:

无状态请求模型

Compute 更适合“输入一批几何/参数,输出一批结果”的无状态任务。每个请求都应尽量自包含:

如果业务必须维护会话状态,建议在 Compute 外层应用服务中管理,例如数据库、对象存储、任务队列、用户会话,再把单次几何计算请求交给 Compute。

生产架构示例

浏览器 / CAD 平台 / 后台任务
  |
  v
业务 API 服务
  |  负责用户、权限、任务、文件、数据库
  v
RhinoCompute 服务
  |  负责 Rhino/Grasshopper 几何求解
  v
对象存储 / 数据库 / 日志监控

不要把 Compute 当成完整业务后端。它更像几何计算执行器。业务认证、文件上传、队列、重试、审计、限流、租户隔离,应由外层服务承担。

本章检查点

参考资料