このページは編集中です。更新が保留になっている可能性があります。
server | v5 switch to v4  

Photon Server設定

Photonの主要な設定ファイルはPhotonServer.configです。 このファイルは、SDKのバイナリフォルダに格納されています。 このファイルはアプリケーション、IPのリスナー、パフォーマンス特有の値を設定するために使用されます。 このファイルには、ゲームロジックからの設定値は含まれません。

デフォルト値はPhotonがより多くのコアでスケールできるようにしますが、通常のマシンよりも優先されることはありません。 基本的に、パフォーマンスの調整は不要です。

以下は、もっとも一般的に使用される設定です。 さらに詳細なオプションについては、Photon Server Config設定ページを参照してください。

目次

インスタンスノード

複数のインスタンスがサポートされています。 各インスタンスには、設定ファイル内に個別のノードがあります。 インスタンスはアプリケーション、リスナーや、その他のインスタンスを実行する際に一緒に使用する必要がある設定のグループです。

例:

<Configuration>
  <LoadBalancing
    MaxMessageSize="512000"
    MaxQueuedDataPerPeer="512000"
    PerPeerMaxReliableDataInTransit="51200"
    PerPeerTransmitRateLimitKBSec="256"
    PerPeerTransmitRatePeriodMilliseconds="200"
    MinimumTimeout="5000"
    MaximumTimeout="30000"
      DirectDispatchToCLR="true"
    DisplayName="LoadBalancing (MyCloud)">

    <!-- instance config here -->

  </LoadBalancing>
</Configuration>

インスタンスノードの名前はカスタムで(たとえば「LoadBalancing」)、以下の属性を設定できます:

  • MaxMessageSize: 単一のピアから送信されるメッセージの最大許容サイズ(単位:バイト)
  • MaxQueuedDataPerPeer: ピアごとの最大バッファサイズ容量(単位:バイト)
  • PerPeerMaxReliableDataInTransit: ピアが送信可能で、かつピアがまだACKを受信していない高信頼データの最大数(単位:バイト)この量のデータが送信されると、その後の高信頼データはすべてキューされます。
  • PerPeerTransmitRateLimitKBSec: 1秒間に送信できるデータ(高信頼および低信頼)の最大量(単位:KB)。これによって、ピアが1秒間に送信できるデータ量に上限を設定できます。 上限に達すると、その後の高信頼データはキューされ、低信頼データは省略されます。
  • PerPeerTransmitRatePeriodMilliseconds: 送信率の制限を確認する頻度。 デフォルトでは、250ミリ秒ごとに確認し、確認するたびにPerPeerTransmitRateLimitKBSecを4倍に拡張します。 値を小さくするとデータフロの一貫性が向上し、値を大きくするとフローがぎこちなくなりますが、サーバーリソースの使用は減ります。
  • MinimumTimeout (「タイムアウト設定」を参照してください)
  • MaximumTimeout (「タイムアウト設定」を参照してください)
  • DirectDispatchToCLR: trueの場合、メッセージはネットワークから管理されたレイヤーへと直接プッシュされます。この時、ThreadPoolから送信されたネイティブキューにキューされません。
  • DisplayName: PhotonControl.PhotonControlがインスタンスに使用する名前。
  • DataSendingDelayMilliseconds (「遅延設定」を参照してください)
  • AckSendingDelayMilliseconds (「遅延設定」を参照してください)
  • ProduceDumps: クラッシュ時の「ダンプファイル」作成の有効化/非有効化を切り替えます。 Photon Coreの問題を見つけるうえで、ダンプファイルは不可欠です。
  • DumpType: 書き出すクラッシュダンプの種類を定義します。「Full」、「Maxi」、「Mini」の種類があり、含まれる情報量が順に少なくなります。 ただし、情報量が少ないほど必要なハードディスク容量は少なくなります。
  • MaxDumpsToProduce: 最大でいくつのダンプファイルを書き出すかを設定します。ファイルが移動または削除された場合には、新規ファイルを書き出すことが可能です。
  • LogFileLocation: 管理されていないPhoton Socket Server向けのログファイルの場所。「PhotonSocketServer.exe」への絶対パス、または相対パスとなります。
  • ...

トップに戻る

タイムアウト設定

インスタンスノードの2つの値は、 サーバーが応答のないUDPクライアントをどのようにタイムアウトするかを示します。 すなわち MinimumTimeoutMaximumTimeout です。

UDPで接続されているピアは、切断されるまでに MinimumTimeout ミリ秒、応答するための時間があります。 切断されるまでの実際の時間は、ピアごとにRTTの履歴にもとづいて動的に決定されます。過去に良かったRTTはより早く切断されます。

TCP接続はノード TCPListenerTCPListener (PhotonServer.config にも)に、個別の InactivityTimeout 設定があります。 これらは5秒(5,000ミリ秒)に設定されています。 この時間内にリクエストが届かない場合、接続はタイムアウトし閉じられます。 クライアントはこれを回避するために、定期的にサーバを「ping」します。

クライアントは独自に接続を監視し、 接続をタイムアウトする可能性もある点に留意してください。 両方の側が、ゲームに適切で、近似したタイムアウトを持つ必要があります。

トップに戻る

遅延設定

属性 DataSendingDelayMillisecondsAckSendingDelayMilliseconds は、 パフォーマンスと最小応答時間の交換を表します。 この遅延は、トラフィックを削減するためにラグを直接加えます:

待機によってサーバーがコマンドを集約し、1つのパッケージでの送信が可能になります。 送信 の遅延はサーバーが何かを送信するとトリガーされ、ack の遅延は信頼性の高いデータの受信にトリガーされます。

上記の通り、各デフォルト値は50ミリ秒です。 これは適切な値ですが、クライアントとサーバーが同じマシン上で稼動していても50ミリ秒未満のラウンドトリップタイムが発生します。

ゲームに合わせて、異なる値での負荷テストをおこなってください。 0の遅延は、タイマーの使用を省略した特殊なケースです。 10未満の低い遅延は避けてください。

トップに戻る

アプリケーションノード

設定ファイルは、Photonが起動時にどのアプリケーションを読み込むかを定義します。 「Applications」ノードでは、複数の「Application」エントリを追加することができます。

複数のアプリケーションを読み込むには、アプリケーションノード(固有の名前を持つ)を追加します。 そのうちの1つにアプリケーションの名前をつけて デフォルトのアプリケーションとすることが出来ます(この例では、「Master」)。 デフォルトのアプリは、不明なアプリケーションへの接続を試行するクライアント用のフォールバックです。

PhotonServer.config で設定されていないアプリケーションは 読み込まれないためデプロイする必要はありません。 アプリケーションが設定ファイルに含まれているが、ファイルが不足している場合にはPhotonは起動せずログに問題を出力します。

例:

<!-- 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_Win64 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">
    </Application>
    <Application
        Name="Game"
        BaseDirectory="LoadBalancing\GameServer"
        Assembly="Photon.LoadBalancing"
        Type="Photon.LoadBalancing.GameServer.GameApplication">
    </Application>

    <!-- CounterPublisher Application -->
    <Application
        Name="CounterPublisher"
        BaseDirectory="CounterPublisher"
        Assembly="CounterPublisher"
        Type="Photon.CounterPublisher.Application">
    </Application>

    <Application
        Name="NameServer"
        BaseDirectory="NameServer"
        Assembly="Photon.NameServer"
        Type="Photon.NameServer.PhotonApp">
    </Application>
</Applications>

各アプリケーションには、クライアントが接続時に参照するための名前が割り当てられます。 アプリケーションノードがサポートする属性は以下のとおりです:

  • BaseDirectory: アプリケーションが存在するフォルダを定義します。 「\bin」フォルダに名前はつけませんが、慣習から名前を予期します。
  • Assembly: アプリケーションの「.dll」の名前です。
  • Type: アプリケーションの「main」クラス(Photon.SocketServer.Application から派生)。

トップに戻る

リスナー

これらは、マシン上のエンドポイントをプロトコル、IP、ポートごとに設定します。 複数リスナーの種類を定義可能です。 いくつかのIP/ポートの組み合わせを開くことで、同じ種類の複数のリスナーを定義できます。

トップに戻る

共通の属性

  • IPAddress: デフォルトのIP 0.0.0.0により、Pho​​tonはローカルで利用可能な任意のIP上でリッスンします。 ここで、複数IPをともなうマシンは正しいものを定義する必要があります。 ワイルドカードIPを置き換えることで、Photonは特定のIPアドレスのみを開きます。
    注:IPに結びついたライセンスを使用している場合には、このIPを設定済みのリスナーで設定する必要があります。
  • Port: リッスンするポート番号。
  • OverrideApplication: このポートに接続するすべてのクライアントは、そのクライアントが何に接続しているかにかかわらず、名前のつけられたアプリケーションへと進みます。
  • DefaultApplication: クライアントによって名前のつけられたアプリケーションが見つからない場合のフォールバックです。

トップに戻る

セキュアなリスナーへの証明書のセットアップ

v5では、証明書の処理(フォーマット、設定など)にOpenSSLを使用しています。 該当のリスナーに使用すべき設定は以下のとおりです(TCPListener、S2S、WebSocketListener、WebSocketS2S)。 リスナーを安全にするには(証明書を使用するには)、「Secure」を「True」に設定してください。証明書に関するその他すべての設定を有効にするには、この設定が必須となります。

証明書ファイルパスが、デフォルトの予期される値と合致する場合にはすべての設定をスキップできます。 「RootCertificate」ファイルは完全にオプションであり、サーバーはこのファイルなしでも作動するためスキップ可能です。

暗号リスト文字列について、弊社はSSLv3としてTLS1.2以降を推奨します。TLS 1.0および1.1 は軽視されます。

  • Secure: TrueまたはFalseで、このリスナーがセキュアな接続を使用しているかを定義します。
  • CipherList: OpenSSLの暗号リスト文字列。 詳細は OpenSSLの暗号ドキュメントページの、特に「CIPHER STRINGS」、「EXAMPLE」の箇所を参照してください。Trueにするには「Secure」を設定してください。
  • CertificatePath: 証明書を含むディレクトリへの、末尾のスラッシュを含まない絶対パス。 デフォルトは「PhotonServer.config」を含むフォルダの「certs」サブフォルダです。たとえば、SDK:「{SDK folder}\deploy\bin_Win64\certs」内では 「{PhotonServer.config folder}\certs」です。Trueにするには「Secure」と設定する必要があります。
  • Certificate: 証明書を含むファイルの名前。 デフォルトは「server.pem」です。 フォルダは「CertificatePath」で定義されます。 Trueにするには「Secure」と設定する必要があります。
  • RootCertificates: ルート証明書が存在する場合には、その証明書を含むファイルの名前。 デフォルトは「root.pem」です。 フォルダは「CertificatePath」で定義されます。 Trueにするには「Secure」と設定する必要があります。

トップに戻る

TCPListeners

  • InactivityTimeout: 反応のないピアをサーバーが切断するまでの時間。 値「0」はタイムアウトがないことを意味します。 単位はミリ秒です。
  • DisableNagle: 接続時にNagleのアルゴリズムが使用されているかを判定します。 trueに設定されている場合にNagleは無効化され、TCPスタックに到達るすとすぐに出力TCPデータが送信されます。 falseに設定されるとNagleが作動し、TCPスタックは出力データを、より少ないデータグラムに合体させます。 この設定をtrueにすると、TCP接続のレイテンシーが若干改善するかもしれませんが、送信されるデータグラムは増加します。

トップに戻る

WebSocketListeners

  • AppDataInactivityTimeout: 何もデータを取得しない場合のアプリケーション(マネージドコード)のタイムアウト。これは低いレベル(ネイティブコード)のキープアライブpingとは対照的です。

トップに戻る

ポート設定

アプリケーションのポートを変更するには、設定されたリスナーノードで「Port」属性値を編集します。 新しいマスターサーバーポートに接続するよう、クライアントを変更します。 Photon Serverを再起動してください。

トップに戻る

マスターサーバーのポートの変更

「Master」アプリケーションのポートを変更する場合、NameServerアプリケーションの設定をアップデートする必要があります。 これは、ポートが変更されたリスナーのプロトコルに合致するよう設定を変更するという考えにもとづいています。 リスナー名と設定名のマッピングを取得するには、以下のリストを使用してください:

  • 「deploy\bin_Win64\PhotonServer.config」内のリスナー名 -> 「deploy\NameServer\bin\Photon.NameServer.dll.config」内の設定名
  • "UDPListener" -> "MasterServerPortUdp"
  • "TCPListener" -> "MasterServerPortTcp"
  • "WebSocketListener" -> "MasterServerPortWebSocket" / "MasterServerPortSecureWebSocket"
  • "RHTTPListener" -> "MasterServerPortHttp" / "MasterServerPortSecureHttp"

例:

「deploy\bin_Win64\PhotonServer.config」でUDPListenerポートをデフォルトの5055から5555に変更する場合

<UDPListener
    IPAddress="0.0.0.0"
    Port="5555"
    OverrideApplication="Master">
</UDPListener>

UDPListener内の値のセットに合致するよう、「deploy\NameServer\bin\Photon.NameServer.dll.config」の「MasterServerPortUdp」の値を編集する必要があります。

<setting name="MasterServerPortUdp" serializeAs="String">
    <value>5555</value>
</setting>

「deploy\NameServer\bin\Photon.NameServer.dll.config」の「NameServer」アプリケーション用の「MasterServerPortXXX」の値の設定は、各プロトコルを認証する際に「NameServer」アプリケーションから、「Master」アドレスとともにクライアントに返されるポート番号に対応しています。 プロトコルに対してポートが設定されていない(設定が不足している)、または適切に設定されていない(不整合)場合には、マスターサーバーへの接続時にクライアントに問題が生じる可能性があります。

トップに戻る

ゲームサーバーポートの変更

「ポート」を「Game」アプリケーションに変更する場合、そのアプリケーション向けに設定をアップデートする必要があります。 これは、ポートが変更されるリスナーのプロトコルに合致するよう、設定を変更するという考えにもとづいています。 リスナー名と設定名のマッピングを取得するには、以下のリストを使用してください。

  • 「deploy\bin_Win64\PhotonServer.config」内のリスナー名 -> 「deploy\LoadBalancing\GameServer\bin\Photon.LoadBalancing.dll.config」内の設定名
  • "UDPListener" -> "GamingUdpPort"
  • "TCPListener" -> "GamingTcpPort"
  • "WebSocketListener" -> "GamingWebSocketPort" / "GamingSecureWebSocketPort"
  • "RHTTPListener" -> "GamingHttpPort" / "GamingHttpsPort"

例:

「deploy\bin_Win64\PhotonServer.config」でUDPListenerポートをデフォルトの5056から6666に変更する場合

<UDPListener
    IPAddress="0.0.0.0"
    Port="6666"
    OverrideApplication="Game">
</UDPListener>

UDPListeneで設定された値に合致するよう、「deploy\LoadBalancing\GameServer\bin\Photon.LoadBalancing.dll.config」の「GamingUdpPort」値を編集する必要があります:

<!-- Client-to-Gameserver UDP connections. Needs to match the UDPListener in PhotonServer.config -->
<setting name="GamingUdpPort" serializeAs="String">
    <value>6666</value>
</setting>

「deploy\LoadBalancing\GameServer\bin\Photon.LoadBalancing.dll.config」の「Game」アプリケーション用の「GamingXXXPort」の値の設定は、各プロトコルのマッチメイキングで「「Master」アプリケーションから、「Game」アドレスとともにクライアントに返されるポート番号に対応しています。プロトコルに対してポートが設定されていない(設定が不足している)、または適切に設定されていない(不整合)場合には、そのプロトコルを使用してルームに参加する際、またはルームを作成する際、クライアントに問題が生じる可能性があります。 実際に、クライアントは「ゲーム」サーバーアプリケーションに接続することができなくなります。

トップに戻る

ポートの追加

アプリケーションごとに複数のポートを設定できます。 これは、特定のプロトコルを使用してアプリケーションに到達する際にクライアントに問題が生じた場合に役立ちます。また、すべてのクライアント用にこのプロトコルを変更することはできません。「Game」サーバーアプリケーションへの接続時に特別に必要になった場合に、クライアントはこれらのポートに明示的に切り替える必要があります。

例:

デフォルトでは、アプリケーションごとに代替UDPポートが提供されます。 Masterへの接続時、クライアントはポート5055、代替として27001を使用できます。 Gameへの接続時、クライアントはポート5056、代替として27002を使用できます。 NameServerへの接続時、クライアントはポート5058、代替として27000を使用できます。

    <UDPListeners>
      <UDPListener
        IPAddress="0.0.0.0"
        Port="5055"
        OverrideApplication="Master">
      </UDPListener>
      <UDPListener
        IPAddress="0.0.0.0"
        Port="27001"
        OverrideApplication="Master">
      </UDPListener>
      <UDPListener
        IPAddress="0.0.0.0"
        Port="5056"
        OverrideApplication="Game">
      </UDPListener>
      <UDPListener
        IPAddress="0.0.0.0"
        Port="27002"
        OverrideApplication="Game">
      </UDPListener>
      <UDPListener
        IPAddress="0.0.0.0"
        Port="5058"
        OverrideApplication="NameServer">
      </UDPListener>
      <UDPListener
        IPAddress="0.0.0.0"
        Port="27000"
        OverrideApplication="NameServer">
      </UDPListener>
    </UDPListeners>

トップに戻る

ランタイムノード

使用するPhoton Runtime Assemblyを定義します。

<Runtime
    Assembly="PhotonHostRuntime, Culture=neutral"
    Type="PhotonHostRuntime.PhotonDomainManager"
    UnhandledExceptionPolicy="TerminateProcess">
</Runtime>
  • UnhandledExceptionPolicy: Ignore または TerminateProcess

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