본문으로 건너뛰기

세션

세션이란 무엇입니까?​

세션은 WebSocket 클라이언트가 포트 10001에 연결하면 자동으로 생성됩니다. 연결 하나가 세션 하나에 해당합니다. 연결이 닫히면 세션은 삭제되고 해당 구성도 폐기됩니다.

각 세션은 다음을 가집니다:

  • 숫자 ID(서비스가 자동으로 할당)
  • 선택적 프로필 이름(직접 설정)
  • 모든 디바이스에 대한 고유한 뷰: basis, mount, preset, filters, 워크스페이스 변환

여러 세션이 공존할 수 있습니다. 예를 들어 한 세션에서는 사용자의 Unity 앱을, 다른 세션에서는 Haply Hub를 관찰할 수 있습니다. 두 세션 모두 같은 물리 디바이스를 보지만, 각자의 좌표 설정을 사용합니다.

프로필 이름 설정​

첫 번째 메시지에서 프로필 이름을 설정하시기를 강력히 권장합니다:

{
"session": {
"configure": {
"profile": {
"name": "co.mycompany.myapp:main-scene"
}
}
}
}

중요한 이유:

  • Haply Hub는 프로필 이름을 사용하여 시뮬레이션을 인식하고, 해당 UI에서 디바이스 설정(워크스페이스, basis, mount, filters)을 조정할 수 있게 합니다.
  • 이러한 조정 사항은 영구 저장됩니다. 같은 앱을 다음에 실행하면 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 Remote Config 튜토리얼을 참고하십시오.