会话
什么是会话?
当 WebSocket 客户端连接到端口 10001 时,会自动创建一个会话。一个连接对应一个会话。连接关闭时,该会话随即被销毁,其配置也会被丢弃。
每个会话包含:
- 一个数字 ID(由服务自动分配)
- 一个可选的配置名称(由你设置)
- 其对每个设备的独立视图:基准、挂载、预设、过滤器和工作空间变换
可以同时存在多个会话,例如,你的 Unity 应用使用一个会话,而 Haply Hub 则在另一个会话中进行观察。它们各自看到的是同一台物理设备,但使用各自独立的坐标设置。
设置配置名称
强烈建议在你的第一条消息中设置配置名称:
{
"session": {
"configure": {
"profile": {
"name": "co.mycompany.myapp:main-scene"
}
}
}
}
为什么重要:
- Haply Hub 利用配置名称来识别你的仿真程序,并允许你在其界面中调整设备设置(工作空间、基准、挂载、过滤器)。
- 这些调整会被持久保存——下次运行同一应用时,Hub 会自动重新应用这些设置,无需你在代码中做任何改动。
- 其他会话(或 HTTP 客户端)可以通过会话选择器,使用配置名称指定你的会话,例如:
?session=myapp:0。配置名称选择器还支持*/?通配符,因此像?session=co.haply.hub::*:0这样的命名空间无需知道完整的配置名称即可使用。
远程控制(跨会话配置)
一个会话的设备可以从外部重新配置——既可以由另一个 WebSocket 会话完成,也可以由没有任何 WebSocket 连接的 HTTP 客户端完成。Haply Hub 正是通过这种方式调整你应用的设置的。
HTTP 客户端使用会话选择器来指定目标会话:
# List all sessions
curl http://localhost:10001/sessions
# Look up a single session directly (path-form of the selector — same
# expressions as `?session=`, see Selectors for the full grammar)
curl http://localhost:10001/sessions/:myapp:0
# Change the basis on session with profile "myapp" (first match)
curl -X POST "http://localhost:10001/inverse3/0/config/basis?session=myapp:0" \
-H "Content-Type: application/json" \
-d '{"permutation": "XZY"}'
# Same, but target the first session in a namespace (profile wildcard)
curl -X POST "http://localhost:10001/inverse3/0/config/basis?session=co.haply.hub::*:0" \
-H "Content-Type: application/json" \
-d '{"permutation": "XZY"}'
有关跨会话 HTTP 控制的完整示例,请参阅 HTTP 远程配置教程。