복수의 방과 채널¶
Strix는 동기화, 메시징, 동작을 개별 방으로 한정합니다. 방 A에 있는 플레이어는 방 B에 있는 플레이어와 상호작용을 할 수 없습니다. 따라서 네트워킹 로직이 단순합니다.
단, 게임 중에는 한 매치를 넘어서는 멀티플레이어 기능이 있는 것도 있습니다. 채팅 시스템을 예로 들면, 플레이어들이 서로 다른 매치를 하고 있어도 소통할 수 있습니다. MMO인 경우에는 게임 안에서 몇 마일 떨어져 있는 플레이어 간에 서로 소통과 상호작용을 허용할 수 있습니다.
Strix는 여러 방 연결을 허용하여 이 문제를 해결합니다. 플레이어들은 한 매치에 국한되지 않고 서로 독립되어 있는 여러 방에 연결할 수 있습니다.
채널¶
Strix Unreal SDK에서는 채널이라는 개념으로 이것을 지원합니다. 채널은 특정 방 연결을 지칭하며 채널 ID로 식별합니다. 채널 ID 인수는 여러 함수와 이벤트, 구성요소에 존재합니다.
Strix 함수는 방 서버나 방에 연결할 때 채널 ID를 인수로 이용합니다. 연결에 성공하면 새 연결에 해당 채널이 등록됩니다. 다른 채널 ID로 연결 함수를 호출하면 다른 방 연결이 만들어집니다.
이후에 채널 ID로 일어나는 동작은 모두 그 채널에 속하는 연결에서 진행됩니다. 채널 ID가 있는 요소는 모두 그 연결에 대해서만 로직을 실행합니다.
Strix Unreal Sample에 이것의 예가 나와 있습니다. 채널 샘플은 채팅방 몇 개에 추가로 연결됩니다. 동기화는 모두 메인 방 채널에서 일어나며, 이 때문에 다른 방과는 중복되지 않습니다. 그러나, 플레이어들은 이 메인 게임 방과 별개로 채팅 메시지를 통해 소통할 수 있습니다.
참고
채널 ID는 개발자가 게임 개발 중에 결정하는 정수값입니다. 예를 들면, "1번 채널은 던전에서 한 파티를 나타내는 방, 2번 채널은 길드 채팅방, 3번 채널은..."과 같이 정하고, 함수를 호출할 때 결정한 채널 번호 중에서 하나를 지정하는 것입니다.
일반적인 저수준 API에서 본 핸들의 개념과는 다릅니다. 즉, 저수준 API에서는 예를 들면 값이 라이브러리에서 정해져 설계 당시에는 예측이 불가능한 핸들을 리턴합니다. 애플리케이션에서는 이것을 변수로 저장하고 파일에서 읽을 때 핸들 값을 지정합니다.
방 서버 vs 방 연결¶
방에 연결되어 있지 않을 때도 채널이 열려 있을 수 있습니다. 플레이어가 방 서버에 연결되어 있지만 방에 입장하지 않았을 때 일어납니다.
SDK에서는 방 서버에서 일어나는 작동과 마스터 서버에서 일어나는 작동을 구분합니다. 마스터 서버 작동에서는 방 서버 연결이 필요 없으며, 이 방법 중 하나를 이용하여 방에 입장하면 자동으로 관련 방 서버와 방에 연결됩니다.
만약 플레이어가 특정 방 서버에 수동으로 연결하면 방에는 연결되지 않습니다. 등록된 채널 ID를 이용하는 운영은 이 방 서버를 이용하지만, 플레이어가 방에 입장할 때까지 방은 운영되지 않습니다.