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

Photon Server設定

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

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

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

目次

インスタンスノード

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

例:

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

    <!-- instance config here -->

  </Instance>
</Configuration>

インスタンスノードには、以下の属性を設定できます:

  • Name: Photon Socket Serverのインスタンスに使用する名前。
  • 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はダンプファイルを作成するように設定することができます。 これらはクラッシュ時の状態やメモリを反映しており、このようなケースのデバッグには非常に有効です。

ダンプ・ファイルが作成されたら、それをログと一緒に圧縮し、問題の説明を添えて弊社に送信してください。 問題を解決するために、より多くの情報が必要な場合、連絡いたします。

  • ProduceDumps: クラッシュ時のダンプファイルの作成を有効または無効にするスイッチです。 ダンプファイルはPhoton Coreの問題を発見するために不可欠です。
  • DumpType: クラッシュ時のダンプファイルの種類を指定します。 タイプは "Full"、"Maxi"、"Mini "で、最初から最後まで少ない情報しか含まれていませんが、必要なストレージ容量は少なくて済みます。
  • MaxDumpsToProduce: 最大何個のダンプファイルを書き込むかを設定します。 ファイルが移動または削除された場合、新しいファイルが書き込まれます。

トップに戻る

ログ設定

  • LogFileLocation: 管理されていないPhoton Socket Serverのログファイルの場所。 絶対パスまたは "PhotonSocketServer.exe "からの相対パスを指定します。
  • LogFileName:管理されていないPhoton Socket Serverのログファイルの名前。
  • LoggingEnabled:このインスタンスの管理されていないログを有効または無効にします。
  • LogUnimportantExceptions:いくつかの例外をログに記録するかどうかを指定します。

トップに戻る

スキーマの検証

  • ValidateSchema:このインスタンスのスキーマ検証を有効または無効にします。
  • SchemaValidationFailureIsFatal:スキーマ検証の失敗がサーバーのシャットダウンにつながるかどうかを示します。

トップに戻る

アプリケーションノード

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

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

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="NameServer">
  <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>
  <Application
    Name="NameServer"
    BaseDirectory="NameServer"
    Assembly="Photon.NameServer"
    Type="Photon.NameServer.PhotonApp">
  </Application>
</Applications>

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

  • BaseDirectory: アプリケーションが存在するフォルダを定義します。 「\bin」フォルダに名前はつけませんが、慣習から名前を予期します。
  • Assembly: アプリケーションの「.dll」の名前です。
  • Type: アプリケーションの「main」クラス(Photon.SocketServer.Application から派生)。
  • ApplicationRootDirectory:
  • PassUnknownAppsToDefaultApp:
  • SharedDirectory:「共有」されたアセンブリを格納するために使用される。 BaseDirectoryの下に配置されます。
  • SharedDirIsExeDir:
  • StartTimeoutMilliseconds: アプリケーションが起動しない場合、Photonはシャットダウンします。設定された時間内にアプリケーションが起動しない場合、Photonはシャットダウンします。 0 = タイムアウトは適用されません。
  • StopTimeoutMilliseconds: アプリケーションが起動しないとPhotonはシャットダウンします。設定された時間内にアプリケーションが停止しない場合、Photonはシャットダウンします。 0 = タイムアウトは適用されません。

トップに戻る

リスナー

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

トップに戻る

共通の属性

これらの属性は、複数のタイプのリスナー間で共有されます。 いくつかはTCP固有のものです。

  • IPAddress: デフォルトのIP 0.0.0.0により、Pho​​tonはローカルで利用可能な任意のIP上でリッスンします。 ここで、複数IPをともなうマシンは正しいものを定義する必要があります。 ワイルドカードIPを置き換えることで、Photonは特定のIPアドレスのみを開きます。
    注:IPに結びついたライセンスを使用している場合には、このIPを設定済みのリスナーで設定する必要があります。
    • IPAddressIPv6: 例:リッスンするIPアドレス。2001:db8:a0b:12f0::1 or :: リッスンするIPアドレス。
  • Port: リッスンするポート番号。
  • OverrideApplication: このポートに接続するすべてのクライアントは、そのクライアントが何に接続しているかにかかわらず、名前のつけられたアプリケーションへと進みます。
  • DefaultApplication: クライアントによって名前のつけられたアプリケーションが見つからない場合のフォールバックです。
  • PassUnknownAppsToDefaultApp: Trueの場合、未知のアプリケーション名が指定されると、デフォルトのアプリケーションが使用されます。 falseの場合は、接続を終了する致命的なエラーになります。
  • Disabled:このリスナーが無効であるかどうかを定義します。このリスナーが無効であるかどうかを定義します。
  • AppDataInactivityTimeout: 低レベル(ネイティブコード)のキープアライブPINGとは対照的に、アプリケーション(マネージドコード)がデータを取得しない場合のタイムアウトです。
  • Access-Control-Allow-Origin:
  • MaxMessageSize:
  • MaxInboundMessageSize: このリスナーを通じてサーバーが受信するメッセージの最大バイト数を決定します。 メッセージがMaxInboundMessageSizeの制限を超えた場合、クライアントはサーバーから切断されます。 デフォルトは、MaxMessageSizeの設定値です。
    • MaxOutboundMessageSize:このリスナーを通じてサーバーから送信されるメッセージの最大バイト数を決定します。 メッセージがMaxOutboundMessageSizeの制限を超えた場合、クライアントはサーバーから切断されます。 デフォルトは、MaxMessageSizeの設定値です。
    • InactivityTimeout:サーバーが応答のないピアを切断するまでの時間です。 "0 "の値は、タイムアウトがないことを意味します。 単位はミリ秒です。
    • DisableNagle:接続にNagleのアルゴリズムが使用されているかどうかを判断します。 trueに設定すると、Nagleは無効になり、送信用のTCPデータは、TCPスタックに到達するとすぐに送信されます。 falseに設定されていると、Nagleは動作しており、TCPスタックは送信データをより少ないデータグラムにまとめようとします。 この設定を true にすると、送信されるデータグラムの数は増えますが、TCP 接続のレイテンシが少し改善されるかもしれません。
    • ListenBacklog:リスニングバックログキューのサイズです。 これは、同時に確立できる接続の数に影響します。例えば、151のクライアントが全く同時に接続を試みた場合、最後の1つが拒否される可能性があります。 なお、各接続確立の試みにはほとんど時間がかからず、いったん接続が確立されると制限の影響を受けません。 したがって、この値を10に設定しても、10以上の同時接続を試みない限り、10,000の同時アクティブ接続を維持することができます。
    • CustomConnectMessagePrefix: Photonは、設定された文字列がクライアントの接続メッセージのプレフィックスとして送信された場合、それを無視します。
    • CustomConnectMessageSuffix: Photonは、クライアントの接続メッセージの接尾辞として送られた設定された文字列を無視します。
    • CustomConnectMessageIsRequired: trueに設定すると、各接続メッセージにカスタムの接頭辞/接尾辞が必要になります。
    • LoggingEnabled**: このリスナーのログが有効であるかどうかを定義します。
    • FlowControlMaxQueuedBytes:このリスナーのログが有効かどうかを定義します。

トップに戻る

HttpListener

v5では、WebSocketListenersやその他のHTTPまたはWebベースのリスナーは、1つのコンフィギュレーションノードに置き換えられています。HttpListenersです。 PeerTypeによって、リスナーは特定のプロトコルやバリアントに対応します。

  • Simple: HttplistenerまたはRawHTTPListenerノードによる設定に使用されます。
  • Reliable: ReliableHttpListenerノードによる設定に使用されます。
  • WebSocket: WebSocketListenerノードによる設定に使用されます。
  • WebRTC: WebRTCHTTPListenerノードによる設定に使用されます。
<HTTPListeners>
      <HTTPListener
        Name="MyListenerNameShowsUpInPerfMon"
        IPAddress="0.0.0.0"
        IPAddressIPv6="::"
        Port="80"
        OverrideApplication = "WebSocketEchoApp"
        InactivityTimeout="5000"
        DisableNagle="true"
        Secure = "true"
        PeerType="Simple|Reliable|WebSocket|WebRTC"        
        MaxUriLength="255"
        MaxHeaderLength="255"
        MaxHeaders="20"
        PermittedOrigins="photonengine.com, myawesome.game, etc."
        MaxInboundMessageSize="10000"
        MaxInboundMessageQueueSize="50000"
        MaxOutboundMessageSize="10000"
        MaxOutboundMessageQueueSize="50000"
        Ping="false"
        WebHook="false"
        NoCache="true"
        >
        <StandardHeaders>
          <StandardHeader Name="X-Blah" Value="X-BlahValue"/>
          <StandardHeader Name="X-Blah2" Value="X-Blah2Value"/>
        </StandardHeaders>
        <Routing>
           <Route Url="/"/> <!-- If present this is a wildcard match for ANY url not specified -->
           <Route Url="/photon/m" Ping="true" WebHook="true" PeerType="Simple"/>
           <Route Url="/photon/g" PeerType="Reliable"/>
           <Route Url="/photon/g1" OverrideApplication="HttpApp1" PeerType="Websocket"/>
           <Route
               PermittedOrigins="*"
               Url="/photon/g2"
               InactivityTimeout="12000"
               MaxInboundMessageSize="10000"
               MaxInboundMessageQueueSize="50000"
               MaxOutboundMessageSize="10000"
               MaxOutboundMessageQueueSize="50000"
               OverrideApplication="HttpApp2"/>
        </Routing>
      </HTTPListener>

この概念は、アプリケーションごとにリスナーを設定し、必要に応じてエンドポイントごとに追加のルートや追加のヘッダーを設定するというものです。 設定されたルートは、ベースとなるリスナーの設定を継承することも、オーバーライドすることもできます。

HttpListenerノード固有の属性です:

  • RouteCounters:

HttpListenerとRouteノードで共有される属性です:

  • Name: リスナーまたはルートの名前です。 Windowsのパフォーマンスカウンターで識別するのに便利です。
  • PermittedOrigins:許可されたドメインです。ホワイトリストに登録されているドメインです。
  • Ping。Ping: trueまたはfalseで、このエンドポイントにpingを実行するかどうかを指定します。
  • PingEvery:このエンドポイントにpingを送信する頻度です。Ping "が true であることが必要です。
  • WebHook: WebHook**:このエンドポイントをWebHookにするかどうかを、trueまたはfalseで指定します。
  • Counters: HTTPリスナーに対して、ルートレベルのカウンターを作成するかどうかを、trueまたはfalseで指定します。デフォルトでは、単一のルートを持つHTTPリスナーにはルートレベルのカウンターは作成されません。
  • ParentCounters: 相対的な親カウンターです。
  • Url:このエンドポイントのURLです。
  • MaxInboundMessageQueueSize:
  • MaxOutboundMessageQueueSize:
  • MaxUriLength:
  • MaxHeaderLength:
  • MaxHeaders:

トップに戻る

エンドポイントカウンター

ルートレベルのカウンター名には、以下のマクロを含めることができます:

  • [ADDRESS]: IPアドレス(例:192.168.0.1)。
  • [PORT]: ポート番号(例:8080)。
  • [FULL_ADDRESS]:IPアドレスとポート。192.168.0.1:8080。
  • [ENDPOINT]: エンドポイントの名前です。
  • [PARENT]: エンドポイントの名前、またはParentCounters=""。

トップに戻る

ランタイムノード

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

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

トップに戻る

パスのマクロ

パスの設定を簡単にするために、最も重要なフォルダのマクロを用意しました。

  • [EXE]:サーバの実行ファイル "PhotonSocketServer.exe "が格納されているフォルダ。
  • [CONFIG]: サーバで使用される設定ファイルが格納されているフォルダ。
  • [DEPLOY][CONFIG]の親フォルダ、つまり[CONFIG]\...です。
  • [CERTS]:デフォルトの "CertificatePath "の値:[EXE]\certs

マクロを使って相対パスを形成することができます。 マクロは、サーバー起動時にアンマネージドなPhotonSocketServerのログファイルに記録されます。

22572: 16:13:36.098 - Config File: D:\ExitGames\SDKs\Server\Photon-OnPremises-Server-Classic-SDK_v5-0-12-24441-RC1\deploy\bin_Win64\PhotonServer.config
22572: 16:13:36.098 - Config|INFO| Adding config path macro: "[CONFIG]" - "D:\ExitGames\SDKs\Server\Photon-OnPremises-Server-Classic-SDK_v5-0-12-24441-RC1\deploy\bin_Win64"
22572: 16:13:36.098 - Config|INFO| Adding config path macro: "[DEPLOY]" - "[CONFIG]\.."
22572: 16:13:36.098 - Config|INFO| Adding config path macro: "[EXE]" - "D:\ExitGames\SDKs\Server\Photon-OnPremises-Server-Classic-SDK_v5-0-12-24441-RC1\deploy\bin_Win64"
22572: 16:13:36.098 - Config|INFO| Adding config path macro: "[CERTS]" - "[EXE]\certs"

トップに戻る

Managed SocketServer Setting

PhotonSocketServerに関するいくつかの設定は、アプリケーションレベルで行うことができます。 これは、どのようなサーバーアプリケーションでも、アプリケーションのコンフィギュレーションファイルに、以下のようにオプションの<SocketServer>ノード/エレメントを追加することで可能です(例では、各設定のデフォルト値を含んでいます)。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <Photon>
    <SocketServer
        SecurityProtocol = "Tls12|Tls13"
        Protocols = "GpBinaryV16,GpBinaryV18,Json"
        MessageRateLimit = "5000"
        MessageDataRateLimit = "2147483647"
        MaxMessageSizeLimit = "512000"
        LogGuardOn = "true"
        OnlyLogLimitsViolations = "true">
        <S2S
          RpcProtocol = "GpBinaryV18"
          UseInitV3 = "false"
          />
    </SocketServer>
  </Photon>
</configuration>
  • SecurityProtocol:サーバーが使用するTLSのバージョンを定義します。 現在はTLS1.2とTLS1.3が標準となっているため、デフォルト値は推奨されるより安全なものとなっています。 必要な場合のみ変更してください。 可能な値 Ssl3|Tls|Tls11|Tls12|Tls13. これは、.NETのSystem.Net.ServicePointManager.SecurityProtocolを設定します。
  • プロトコル:このサーバーアプリケーションで使用できるデータシリアライズプロトコルを定義します。
  • MessageRateLimit: ピアごとに1秒間に許可される受信メッセージの最大数を指定する。 デフォルトは5000です。
    • MessageDataRateLimit:バッファリングされた受信データについて、ピアごとに1秒間に許容される最大サイズを指定します。 デフォルトは2147483647(int.MaxValue)です。
    • MaxMessageSizeLimit: 着信メッセージに許容される最大サイズです。 デフォルトは512000です。
    • LogGuardOn: スパムの記録に対するガードを有効または無効にします。
    • OnlyLogLimitsViolations: 制限に違反したときにどのような措置を取るかを定義します。
    • RpcProtocol: サーバー間の通信に使用されるデータシリアライズプロトコル。
    • UseInitV3: サーバー間の通信にInitRequestバージョン3を使用するかどうか。

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