Photon운영 사무국입니다.
가끔은 서버 사이드의 설명도 필요할 것 같아 Photon Server에 관해서 이야기하고자 합니다.
※본 내용은 V4 대응을 바탕으로 작성되었습니다.
우선 기본적인 인스톨에 관해서, 실용적으로 사용하기 위해서는 한 대가 아닌, 여러 대로 구성하실 것이라 생각됩니다. 그래서 여러 대 구성에서 사용할 경우의 인스톨 방법에 대해서 간단히 설명해 드리겠습니다.
기본적인 인스톨 방법은 문서의 5분안에 Photon시작하기를 참조해주세요.
https://doc.photonengine.com/ko-kr/onpremise/current/getting-started/photon-server-in-5min
또한, Photon Server의 기동 등에 대해서는 Photon컨트롤을 확인해주세요.
http://doc.photonengine.com/ko-kr/onpremise/current/applications/photon-control-application/
Photon Server앱 구성
Photon Server의 기본 어플리케이션으로는 다음의 두 가지가 있습니다.
- MMO
- LoadBalancing
MMO는 1대 구성에서의 베이스, 그리고 LoadBalancing은 여러 대 구성의 베이스가 됩니다.
Photon Realtime은 LoadBalacing을 기반으로 만들어져 있으며 Photon Unity Networking(PUN)을 이용하는 경우는 LoadBalancing이 필수입니다.
그래서 실제 사용에서는 LoadBalancing을 이용하는 경우가 대부분입니다.
여기서는 그 LoadBalancing으로 Master Server*1대, Game Server*2대의 구성으로 설치를 진행해 보기로 하겠습니다.
LoadBalacing의 내부 구성
LoadBalancing 안에 2종의 애플리케이션이 더 존재합니다.
- Master
- Game
Master는 Master Server부분으로 이른바 로비 부분과 나누는 기능을 가지고 있습니다.
Game은 Game Server부분으로 룸에 입실 후의 게임 부분을 맡고 있습니다. V3까지는 Game1/Game2와 동일하게 2개로 구현되어 있었지만, 1개로 통합되어 알기 쉽게 되어 있습니다.
Master Server와 Game Server에 대한 상세 사항은 아래를 참조해주세요.
http://doc.exitgames.com/ja/onpremise/current/reference/load-balancing
여기에서는 Master Server가 로비, Game Server가 룸 부분을 담당하는구나 라는 것만 이해할 수 있으면 OK입니다!
Master Server의 구축
실제 설정으로 들어가 봅시다.
우선은 Master Server의 구축을 진행해갑니다.
PhotonServer.config의 편집
Photon Server전체 설정을 실시하는 PhotonServer.config을 편집해 나갑니다.
파일 위치는 아래와 같습니다.
(server-sdk)¥ deploy¥ bin_Win{32| 64}¥ PhotonServer.config
기본적인 방침은, LoadBalancing앱(인스턴스)내의 Game앱에 관한 부분을 제외하는 것입니다.
처음에 나오는 것이 UDPListers로, UDP송수신에 관한 부분입니다. 이 중 Game에 관한 부분을 삭제나 코멘트 아웃합니다. 159-168번째 줄 부분입니다.
<!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. --> <!-- Port 5055 is Photon's default for UDP connections. --> <UDPListeners> <UDPListener IPAddress="0.0.0.0" Port="5055" OverrideApplication="Master"> </UDPListener> <UDPListener IPAddress="0.0.0.0" Port="5056" OverrideApplication="Game1"> </UDPListener> <UDPListener IPAddress="0.0.0.0" Port="5057" OverrideApplication="Game2"> </UDPListener> </UDPListeners>
다음은 TCPListeners로, TCP송수신에 관한 부분입니다. 여기도 마찬가지로 Game1/2에 관한 부분을 삭제(또는 코멘트 아웃. 이하 동일). 183-197번째 줄 부분입니다.
<!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. --> <TCPListeners> <!-- TCP listener for Game clients on Master application --> <TCPListener IPAddress="0.0.0.0" Port="4530" OverrideApplication="Master" PolicyFile="Policy\assets\socket-policy.xml" InactivityTimeout="10000" > </TCPListener> <TCPListener IPAddress="0.0.0.0" Port="4531" OverrideApplication="Game1" PolicyFile="Policy\assets\socket-policy.xml" InactivityTimeout="10000"> </TCPListener> <TCPListener IPAddress="0.0.0.0" Port="4532" OverrideApplication="Game2" PolicyFile="Policy\assets\socket-policy.xml" InactivityTimeout="10000"> </TCPListener> <!-- DON'T EDIT THIS. TCP listener for GameServers on Master application --> <TCPListener IPAddress="0.0.0.0" Port="4520"> </TCPListener> </TCPListeners>
계속해서 WebSocketListeners, WebSocket통신에 관한 부분입니다. 여기도 마찬가지로 삭제합니다. 232-246번째 줄입니다.
<!-- WebSocket (and Flash-Fallback) compatible listener --> <WebSocketListeners> <WebSocketListener IPAddress="0.0.0.0" Port="9090" DisableNagle="true" InactivityTimeout="10000" OverrideApplication="Master"> </WebSocketListener> <WebSocketListener IPAddress="0.0.0.0" Port="9091" DisableNagle="true" InactivityTimeout="10000" OverrideApplication="Game1"> </WebSocketListener> <WebSocketListener IPAddress="0.0.0.0" Port="9092" DisableNagle="true" InactivityTimeout="10000" OverrideApplication="Game2"> </WebSocketListener> </WebSocketListeners>
마지막은 Application의 정의 부분으로, Game1/Game2의 정의를 삭제합니다. 269-286번째 줄입니다.
<!-- Defines which applications are loaded on start and which of them is used by default. Make sure the default application is defined. --> <!-- Application-folders must be located in the same folder as the bin_win32 folders. The BaseDirectory must include a "bin" folder. --> <Applications Default="Master"> <Application Name="Master" BaseDirectory="LoadBalancing\Master" Assembly="Photon.LoadBalancing" Type="Photon.LoadBalancing.MasterServer.MasterApplication" ForceAutoRestart="true" WatchFiles="dll;config" ExcludeFiles="log4net.config" > </Application> <Application Name="Game1" BaseDirectory="LoadBalancing\GameServer1" Assembly="Photon.LoadBalancing" Type="Photon.LoadBalancing.GameServer.GameApplication" ForceAutoRestart="true" WatchFiles="dll;config" ExcludeFiles="log4net.config"> </Application> <Application Name="Game2" BaseDirectory="LoadBalancing\GameServer2" Assembly="Photon.LoadBalancing" Type="Photon.LoadBalancing.GameServer.GameApplication" ForceAutoRestart="true" WatchFiles="dll;config" ExcludeFiles="log4net.config"> </Application> <!-- CounterPublisher Application --> <Application Name="CounterPublisher" BaseDirectory="CounterPublisher" Assembly="CounterPublisher" Type="Photon.CounterPublisher.Application" ForceAutoRestart="true" WatchFiles="dll;config" ExcludeFiles="log4net.config"> </Application> </Applications>
수고하셨습니다. Master Server의 설정 파일의 변경에 관한 것은 이상입니다.
Photon Server의 기동
변경이 끝났으면 우선 Master Server를 기동해 보고 정상적으로 기동하는지 확인해주세요.
정상적으로 기동하지 않는 경우는
(server-sdk)¥ deploy¥ bin_Win{32| 64}¥ log
폴더에 로그 파일이 생성되므로 로그의 에러 내용을 확인해주세요.
Game Server의 구축
Master Server의 구축을 마쳤으므로 계속해서 Game Server의 구축을 진행하겠습니다.
여기서는 모든 Game Server에서 Game1앱을 사용하는 것으로 하겠습니다. 2개이므로 Game1/Game2 각각을 사용해도 되지만 더 늘릴 경우, 번거로워지므로 같은 것으로 했습니다.
PhotonServer.config의 편집
우선 처음에는 Master Server와 마찬가지로 PhotonServer.config부터 편집해가겠습니다.
(server-sdk)¥ deploy¥ bin_Win{32| 64}¥ PhotonServer.config
기본 방침은 Master Server와 같지만 남기는 것은 Game1이 됩니다.
처음에는 UDPListers로 이 중 Master/Game2에 관한 부분을 삭제. 154-158,164-168번째 줄 입니다.
<!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. --> <!-- Port 5055 is Photon's default for UDP connections. --> <UDPListeners> <UDPListener IPAddress="0.0.0.0" Port="5055" OverrideApplication="Master"> </UDPListener> <UDPListener IPAddress="0.0.0.0" Port="5056" OverrideApplication="Game1"> </UDPListener> <UDPListener IPAddress="0.0.0.0" Port="5057" OverrideApplication="Game2"> </UDPListener> </UDPListeners>
다음은 TCPListeners로, TCP송수신에 관한 부분입니다. 여기도 마찬가지로 Master/Game2에 관한 부분을 삭제합니다. 174-181,191-197번째 줄입니다.
<!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. --> <TCPListeners> <!-- TCP listener for Game clients on Master application --> <TCPListener IPAddress="0.0.0.0" Port="4530" OverrideApplication="Master" PolicyFile="Policy\assets\socket-policy.xml" InactivityTimeout="10000" > </TCPListener> <TCPListener IPAddress="0.0.0.0" Port="4531" OverrideApplication="Game1" PolicyFile="Policy\assets\socket-policy.xml" InactivityTimeout="10000"> </TCPListener> <TCPListener IPAddress="0.0.0.0" Port="4532" OverrideApplication="Game2" PolicyFile="Policy\assets\socket-policy.xml" InactivityTimeout="10000"> </TCPListener> <!-- DON'T EDIT THIS. TCP listener for GameServers on Master application --> <TCPListener IPAddress="0.0.0.0" Port="4520"> </TCPListener> </TCPListeners>
계속해서 WebSocketListeners, WebSocket통신에 관한 부분입니다. 여기도 마찬가지로 삭제합니다. 224-230,240-246번째 줄이 되겠습니다.
<!-- WebSocket (and Flash-Fallback) compatible listener --> <WebSocketListeners> <WebSocketListener IPAddress="0.0.0.0" Port="9090" DisableNagle="true" InactivityTimeout="10000" OverrideApplication="Master"> </WebSocketListener> <WebSocketListener IPAddress="0.0.0.0" Port="9091" DisableNagle="true" InactivityTimeout="10000" OverrideApplication="Game1"> </WebSocketListener> <WebSocketListener IPAddress="0.0.0.0" Port="9092" DisableNagle="true" InactivityTimeout="10000" OverrideApplication="Game2"> </WebSocketListener> </WebSocketListeners>
마지막은 Application의 정의 부분으로 Master/Game2의 정의를 삭제함과 동시에, Application의 Default가 master로 되어 있는 것을 Game1으로 변경할 필요가 있습니다. Default의 변경은 258번째 줄, 삭제하는 것은 259-268,278-286번째 줄입니다.
<!-- Defines which applications are loaded on start and which of them is used by default. Make sure the default application is defined. --> <!-- Application-folders must be located in the same folder as the bin_win32 folders. The BaseDirectory must include a "bin" folder. --> <Applications Default="Game1"> <Application Name="Master" BaseDirectory="LoadBalancing\Master" Assembly="Photon.LoadBalancing" Type="Photon.LoadBalancing.MasterServer.MasterApplication" ForceAutoRestart="true" WatchFiles="dll;config" ExcludeFiles="log4net.config" > </Application> <Application Name="Game1" BaseDirectory="LoadBalancing\GameServer1" Assembly="Photon.LoadBalancing" Type="Photon.LoadBalancing.GameServer.GameApplication" ForceAutoRestart="true" WatchFiles="dll;config" ExcludeFiles="log4net.config"> </Application> <Application Name="Game2" BaseDirectory="LoadBalancing\GameServer2" Assembly="Photon.LoadBalancing" Type="Photon.LoadBalancing.GameServer.GameApplication" ForceAutoRestart="true" WatchFiles="dll;config" ExcludeFiles="log4net.config"> </Application> <!-- CounterPublisher Application --> <Application Name="CounterPublisher" BaseDirectory="CounterPublisher" Assembly="CounterPublisher" Type="Photon.CounterPublisher.Application" ForceAutoRestart="true" WatchFiles="dll;config" ExcludeFiles="log4net.config"> </Application> </Applications>
PhotonServer.config의 편집은 이상입니다.
Photon.LoadBalancing.dll.config의 편집
계속해서 어플리케이션 고유의 설정을 변경해 갑니다.
설정 파일은 다음과 같습니다.
(server-sdk)¥ deploy¥ Loadbalancing¥ GameServer1¥ bin¥ Photon.LoadBalancing.dll.config
먼저, Master Server를 지정합니다. Master Server의 IP주소를 기재해주세요. 변경하는 것은 13번째 줄입니다.
<!-- Set to the IP Address of the Photon instance where your Master application is running. --> <setting name="MasterIPAddress" serializeAs="String"> <value>192.168.1.1</value> </setting>
또 하나는, Game Server로서 안내하는 IP주소의 지정입니다. Game Server가 직접 글로벌 IP주소를 가지고 있는 경우에는 직접 기재해도 좋고, 비워 놓고 자동 판정으로 해 놓아도 상관 없습니다. 여기에서는 자동 판정으로 합니다. 바꾸는 것은 18번째 줄입니다.
<!-- Leave empty and the the IP address will be looked up dynamically at runtime. --> <setting name="PublicIPAddress" serializeAs="String"> <value></value> </setting>
Game Server의 설정 파일의 변경은 이상입니다. 수고하셨습니다.
Photon Server의 기동
변경이 끝났으면 Game Server를 기동해 봐서 정상적으로 기동하는지 확인해주세요.
정상적으로 기동하지 않는 경우는 Master Server와 같이
(server-sdk)¥ deploy¥ bin_Win{32| 64}¥ log
폴더에 로그 파일이 생성되므로 로그의 에러 내용을 확인해봐 주세요.
Game Server가 Master Server로의 등록이 완료되면 Master Server로그에 출력됩니다.
그 부분도 확인해 주세요.
마지막으로...
이상이 여러 대 구성으로 사용할 경우의 설정이었습니다. 양이 많지만 해야 할 일은 그리 복잡하지 않다고 생각합니다.
이번에는 보여드린 내용은 여러 대 구성이긴 하지만 심플한 환경에서의 설치였습니다. 다음은 NAPT 환경하에서의 설정 예 등을 소개해 드리고자 합니다.
Photon Server는 간단히 사용할 수 있지만, 깊이 있는 소프트웨어입니다. 여러 가지를 소개해 드리고 싶습니다. 이런 것이 알고 싶다!라고 생각 드는 부분이나 리퀘스트가 있으면 꼭 연락 주십시오.
댓글
댓글 0개
댓글을 남기려면 로그인하세요.