Server-To-Serverイントロダクション
以下は、上級ディベロッパー向けのチュートリアルです。Photonの使用を開始したばかりの場合には、参照しないほうが安全です。
複雑なゲームを開発している場合、異なるサーバ間で機能を分配する必要があるでしょう。PhotonのServer-To-Server (S2S)機能を使用すれば、Photonサーバ間の通信を実装できます。
概念
PhotonでのS2S通信は、クライアントーサーバー間の通信に非常に類似しています。
1つのPhotonインスタンスが、対象となるPhotonサーバー(これが接続の「受信側」です)への接続(接続の「発信」側です)を開始します。
それぞれの側にピアが作成され、S2S接続を介してオペレーション/イベントの送信に使用できます。
発信側
たとえば、ApplicationBase
から継承するアプリケーション「MyOutboundApplication」アプリケーションがあると仮定しましょう。
S2S接続を開始するには、OutboundS2SPeer.ConnectXXX
メソッドのいずれかを呼び出す必要があります。
S2S通信では、TCP接続の使用を推奨します。
S2S接続の設定には、以下のコードが必要です。
C#
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メソッドを呼び出します:
C#
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」クラスの実装は、同様に非常に簡単です。これは最小限のサンプルですので、必要に応じて独自のコードを追加してください:
C#
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接続の「発信」側で実行すべきことは以上です。
受信側
まず、ピアオブジェクトを作成する必要があります。着信接続元(「クライアント」または「サーバー」)を決定するために、異なるポートをリッスンすることを推奨します。
たとえば、ApplicationBase
から継承するアプリケーションがあると仮定しましょう。以下のコードを追加します:
C#
protected override PeerBase CreatePeer(InitRequest initRequest)
{
if (initRequest.LocalPort == 4520)
{
// for S2S connections
return new MyInboundPeer(initRequest);
}
}
MyInboundPeerはPeerBaseクラスから継承する単純なクラスです。
C#
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接続の「受信」側で実行するべきことは以上です。
設定
受信側のS2S接続をリッスンするために別のポートを使用する場合、以下のようにPhotonServer.configに新しいリスナーを定義する必要があります:
XML
<!-- DON'T EDIT THIS. TCP listener for S2S connections on MyOutbound application -->
<TCPListener
IPAddress="0.0.0.0"
Port="4520">
</TCPListener>
Back to top