server | v4 switch to v3  

Server-To-Serverイントロダクション

以下は、上級ディベロッパー向けのチュートリアルです。Photonの使用を開始したばかりの場合には、参照しないほうが安全です。

複雑なゲームを開発している場合、異なるサーバ間で機能を分配する必要があるでしょう。PhotonのServer-To-Server (S2S)機能を使用すれば、Photonサーバ間の通信を実装できます。

概念

PhotonでのS2S通信は、クライアントーサーバー間の通信に非常に類似しています。 1つのPhotonインスタンスが、対象となるPhotonサーバー(これが接続の「受信側」です)への接続(接続の「発信」側です)を開始します。 それぞれの側にピアが作成され、S2S接続を介してオペレーション/イベントの送信に使用できます。

Back To Top

発信側

たとえば、ApplicationBaseから継承するアプリケーション「MyOutboundApplication」アプリケーションがあると仮定しましょう​​。

S2S接続を開始するには、OutboundS2SPeer.ConnectXXXメソッドのいずれかを呼び出す必要があります。 S2S通信では、TCP接続の使用を推奨します。

S2S接続の設定には、以下のコードが必要です。

    public class MyOutboundApplication : ApplicationBase
    {
        private MyOutboundPeer outboundPeer;
        protected override void Setup()
        {
            this.outboundPeer = new MyOutboundPeer(this);
            this.outboundPeer.ConnectTcp(new IPEndPoint(IPAddress.Parse("123.456.789.123"), 4520), "MyInboundApplication");
        }
    }

上記のコードは、Setup()中にS2S接続を確立します。 これは、後にコードベースでおこなうこともできます。 ただし、2つのサーバー間で使用する接続は1つにするべきですー接続を開いたままにし、その接続を使用してすべてのデータを送信します。

対象のサーバーにデータを送信するには、以下のように単にそのピアのSendOperationメソッドを呼び出します:

    public void SendMessageToMaster(string message)
    {
        var parameters = new Dictionary<byte, object>();
        parameters[0] = message;
        this.outboundPeer.SendOperationRequest(new OperationRequest { OperationCode = 1, Parameters = parameters }, new SendParameters());
    }

「OutboundPeer」クラスの実装は、同様に非常に簡単です。これは最小限のサンプルですので、必要に応じて独自のコードを追加してください:

    public class MyOutboundPeer : OutboundS2SPeer
    {
        public MyOutboundPeer(ApplicationBase application)
            : base(application)
        {
        }
        protected override void OnConnectionEstablished(object responseObject)
        {
        }
        protected override void OnConnectionFailed(int errorCode, string errorMessage)
        {
            // add some custom error handling here
        }
        protected override void OnOperationResponse(OperationResponse operationResponse, SendParameters sendParameters)
        {
        }
        protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)
        {
        }
    }

接続が正常に確立されると、OnConnectionEstablishedメソッドがトリガーされます。 それ以外の場合は、OnConnectionFailed()メソッドが呼び出されます。 そのメソッドをオーバーライドして、エラー処理やログ等を追加することもできます。

S2S接続の「発信」側で実行すべきことは以上です。

Back To Top

受信側

まず、ピアオブジェクトを作成する必要があります。着信接続元(「クライアント」または「サーバー」)を決定するために、異なるポートをリッスンすることを推奨します。

たとえば、ApplicationBaseから継承するアプリケーションがあると仮定しましょう​​。以下のコードを追加します:

    protected override PeerBase CreatePeer(InitRequest initRequest)
    {
        if (initRequest.LocalPort == 4520)
        {
            // for S2S connections
            return new MyInboundPeer(initRequest);
        }
    }

MyInboundPeerはPeerBaseクラスから継承する単純なクラスです。

    public class MyInboundPeer : InboundS2SPeer
    {
        public MyInboundPeer(InitRequest initRequest)
            : base(initRequest)
        {
        }
        protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
        {
            // implement this to receive operation data
        }
        protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)
        {
        }
    }

S2S接続の「受信」側で実行するべきことは以上です。

Back To Top

設定

受信側のS2S接続をリッスンするために別のポートを使用する場合、以下のようにPhotonServer.configに新しいリスナーを定義する必要があります:

    <!-- DON'T EDIT THIS. TCP listener for S2S connections on MyOutbound application -->
    <TCPListener
        IPAddress="0.0.0.0"
        Port="4520">
    </TCPListener>

ドキュメントのトップへ戻る