与外部程序通信指南
与外部程序通信指南
当在 Resonite 中创建物品和世界时,你可能希望将 Resonite 与外部世界连接起来,即连接到它之外的应用程序、软件和系统。本指南将提供一些关于如何实现这一目标的信息。
示例场景
你可能会在以下场景中用到这些功能:
- 与 Web 服务器通信
- 与现实世界的硬件或设备(如心率传感器、灯光或音响设备)通信
- 接收外部数据,例如股票信息、天气预报等
可选方案
你有多种选择来实现与其他应用程序的通信。但对于所有这些选项,请记住 Resonite 不支持原生解析 JSON 或集合/数组(Collections/Arrays),因此你必须在 ProtoFlux 中自己处理这些解析工作。
使用 HTTP 的 Web 服务器通信
Resonite 有两个节点允许你发起 HTTP 请求:
你可以使用这些节点与任何支持 HTTP 的 Web 服务器、API 或系统进行通信。
WebSocket 通信
ProtoFlux 具有 WebSocket 功能。这允许 Resonite 与任何支持 WebSocket 的服务器进行通信。这对于 Resonite 和外部应用程序之间的实时通信非常有用。
通过 WebSocket 发送其他协议
虽然 Resonite 只原生支持 HTTP、WebSocket 和 OSC,但你可以通过 WebSocket 发送类似或封装了其他协议数据的消息。部分用户已经通过这种方式实现了对以下协议的支持:
- DMX(灯光控制协议)
- MIDI(乐器数字接口)
使用 WebSocket / HTTP 代理
你也可以使用 WebSocket 或 HTTP 作为代理(Proxy)来与另一台设备进行通信。用户已经利用该方法对接了:
- 心率传感器
- 日历
- 需要被简化的复杂 API 接口
使用插件 (Plugins)
Resonite 支持 插件,允许你使用 C# 编写自定义功能并引入到 Resonite 中。因为你可以完全控制 C# 代码的实现,这种功能可以非常强大且多样化。但需要注意的是,当你使用插件时,你将被隔离在 Resonite 常规社区之外,因为其他用户只有在安装了相同插件的情况下才能加入你的会话。请参阅 插件页面 了解更多信息。
安全与许可 (Security / Consent)
始终要优先考虑安全性。与外部系统对话可能会引发各种安全隐患。
截至版本 2024.4.26.1258,请特别注意以下事项:
- HTTP 请求和 WebSocket 无法进行身份验证。(例如
https://user:password@host/这样的 URI 中的用户信息将被直接忽略!) - 由于目前缺乏完善的权限系统,世界模型对所有人都是开放的。只要花点心思,任何用户都可以读取本地值并触发另一个人的 ProtoFlux 节点。
这意味着,目前强烈不建议进行任何涉及支付、密码或个人信息的操作。
此外,通过 HTTP 和 WebSocket 进行的外部连接受用户许可(Consent)的控制。用户可以随时阻止或允许访问特定的域名和服务器。请务必使用 Is Host Access Allowed(是否允许主机访问)和 Request Host Access(请求主机访问)节点来检查用户是否拦截了连接,并向用户请求访问主机的权限。在请求访问时,请说明一个合理的理由。
如果用户拒绝了访问,请确保你的系统能够优雅地处理失败(Gracefully fail),并向用户展示清晰的提示信息说明发生了什么。
建议
具体如何抉择完全取决于你,但这里提供一些建议以帮助你做出更好的设计:
- 只有在需要实时通信时才使用 WebSocket。 WebSocket 对服务器和客户端(Resonite 用户)都有额外的性能开销。如果你只需要发出请求并接收单次响应,请考虑改用 HTTP。
- 确保你以正确的用户身份运行请求和连接。 所有的外部连接都需要由某个具体用户发起。例如,当你发出请求时,负责运行该请求的是单个客户端。请务必核实这是正确的用户,并且不要为多个用户运行重复的请求(以免造成请求泛滥)。
No comments to display
No comments to display