This document is about: SERVER 5
SWITCH TO

This page is a work in progress and could be pending updates.

Photon Server Configuration

Photon的主要配置文件是PhotonServer.config
它位於SDK的binaries-文件夾中。
它用於設置應用程序、IP監聽器和性能特定值。
它不包含遊戲邏輯的配置值。

默認值可以確保Photon在更多的核心上有很好的擴展性,但不會使普通機器不堪重負。
一般來說,不需要對性能進行調整。

這裡列出的設置是最常用的。
更多的選項在Photon伺服器配置頁面有描述。

事件節點

支持多個事件。
每個事件在配置文件中都有獨立的節點。
一個事件是一組應用程序、監聽器和其他設置,在運行該事件時應一起使用。

Example:

XML

<Configuration>
  <Instance Name="CustomPhotonServerInstance"
    MaxMessageSize="512000"
    MaxQueuedDataPerPeer="512000"
    PerPeerMaxReliableDataInTransit="51200"
    PerPeerTransmitRateLimitKBSec="256"
    PerPeerTransmitRatePeriodMilliseconds="200"
    MinimumTimeout="5000"
    MaximumTimeout="30000"
    DisplayName="OwnCloudTM">

    <!-- instance config here -->

  </Instance>
</Configuration>

事件節點可以有這些屬性:

  • Name:Photon Socket Server將為該事件使用的名稱。
  • MaxMessageSize:單個對等體允許發送的最大信息量,單位為字節。
  • MaxQueuedDataPerPeer:每個對等體的最大緩沖區容量,字節數。
  • PerPeerMaxReliableDataInTransit:一個對等體可以發送的、對等體尚未收到ACK的最大可靠數據量。
    以字節為單位。
    一旦這個數量的數據被發送,所有未來的可靠數據將被排隊。
  • PerPeerTransmitRateLimitKBSec:一秒鐘內可以發送的最大數據量(可靠的和不可靠的)(單位:KB)。
    這可以用來限制一個對等體可以發送的數據量。
    當達到極限時,可靠的數據被排隊,不可靠的數據被丟棄。
  • PerPeerTransmitRatePeriodMilliseconds:我們檢查傳輸速率限制的頻率。
    默認情況下,我們每250ms檢查一次(即每秒4次),每次檢查時我們將PerPeerTransmitRateLimitKBSec擴大4。
    一個較小的值使數據流更加穩定,而一個較大的值使數據流更加生硬,但使用的伺服器資源較少。
  • MinimumTimeout (見"超時設置")
  • MaximumTimeout (見"超時設置")
  • DisplayName:PhotonControl為該事件顯示的名稱。
  • DataSendingDelayMilliseconds (見"延遲設置")
  • AckSendingDelayMilliseconds (見"延遲設置")
  • ProduceDumps:啟用或禁用創建 "轉儲文件 "的開關,以防發生崩潰。
    轉儲文件對於發現Photon核心的問題至關重要。
  • DumpType (見"Photon Core Debugging")
  • MaxDumpsToProduce (見"Photon Core Debugging")
  • MaxDumpsToAttemptToProduce (見"Photon Core Debugging")
  • ...

超時設置

事件節點中的兩個值描述了伺服器如何超時處理無響應的UDP客戶端。
MinimumTimeoutMaximumTimeout

一個用UDP連接的對象在斷開連接前有MinimumTimeout毫秒的時間來響應。
直到斷開連接的實際時間是根據RTT歷史動態地確定的,每個對象。
狀態好的RTT會更快地斷開連接。

TCP連接在節點TCPListener(也在PhotonServer.config)中有一個單獨的InactivityTimeout設置。
我們把這些設置為5秒(5000ms)。
如果在這段時間內沒有請求到達,連接將被超時並關閉。
客戶端也會定期 "ping "伺服器,以避免這種情況。

請記住,客戶端獨立監控一個連接,也可能超時。
雙方都應該有類似的超時,適合您的遊戲。

延遲設置

屬性DataSendingDelayMillisecondsAckSendingDelayMilliseconds代表了性能和最小響應時間的權衡。
這個延遲直接增加了一些停滯性以減少流量。

等待允許伺服器聚合命令,並將它們打包發送。
當伺服器發送任何東西時,send延遲被觸發,ack延遲被傳入的可靠數據觸發。

正如您在上面看到的,默認值是每個50ms。
我們發現這是一個很好的值,但它會導致往返時間 (50ms),即使客戶端和伺服器運行在同一台機器上。

根據您的遊戲,您應該用不同的值進行加載測試。
0的延遲是一個特殊情況,它跳過了計時器的使用,所以要避免低延遲<10。

日誌設置

  • LogFileLocation:非管理型Photon Socket Server的日誌文件位置。
    它可以是絕對路徑,也可以是與 "PhotonSocketServer.exe "相對的路徑。
  • LogFileName:無人管理的Photon Socket Server日誌文件的名稱。
  • LoggingEnabled:啟用或禁用該事件的非管理型日誌。
  • LogUnimportantExceptions:是否記錄一些被認為不重要的異常。

模式驗証

  • ValidateSchema:啟用或禁用該實例的模式驗証。
  • SchemaValidationFailureIsFatal:模式驗証失敗是否會導致伺服器關閉。

應用程序節點

配置文件定義了Photon在啟動時應該加載哪些應用程序。
在 "應用程序 "節點中,可以添加幾個 "應用程序 "條目。

要加載多個應用程序,只需添加更多的應用程序節點(有唯一的名稱)。
其中一個可以通過使用它的名字(本例中為 "NameServer")成為默認應用程序。
默認的應用程序是客戶端試圖連接到一個未知的應用程序時的備案。

沒有在PhotonServer.config中設置的應用程序不會被加載,也不需要被部署。
當應用程序在配置中,但文件丟失時,Photon不會啟動,並在日誌中命名該問題。

Example:

XML

<!-- 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 "名稱。
  • 類型:應用程序的 "主 "類(它源自Photon.SocketServer.ApplicationBase)。
  • ApplicationRootDirectory
  • PassUnknownAppsToDefaultApp:如果為真,當提供一個未知的應用程序名稱時,將使用默認的應用程序。如果是false,那麼這將是一個致命的錯誤,將終止一個連接。默認為false。
  • StartTimeoutMilliseconds:如果應用程序在配置的時間內沒有啟動,Photon將關閉。
    0 = 應用超時。
  • StopTimeoutMilliseconds:如果應用程序沒有在配置的時間內停止,Photon就會關閉。
    0=應用超時。

監聽

根據協議、IP和端口配置您機器上的端點。
可以定義多個監聽類型。
同一類型的多個監聽可以被定義,打開多個IP/端口組合。

通用設置

這些屬性在大多數監聽中都是共享的。

  • 名稱:監聽的可選名稱。
  • IPAddress:默認IP 0.0.0.0使Photon監聽任何本地可用的IP。
    有多個IP的機器應該在這裡定義正確的IP。
    通過替換通配符IP,Photon將只打開特定的IP地址。
    。 注意:如果您使用的是一個與IP綁定的許可証,您需要在配置的監聽中設置這個IP。
  • Port:要監聽的端口號。
  • IPAddressIPv6:要監聽的IP地址,例如,2001:db8:a0b:12f0::1或::要監聽所有的接口。
  • ListenBacklog:監聽積壓隊列的大小。
    這影響到可以同時建立的連接的數量;例如,如果151個客戶試圖在同一時間連接,那麼最後一個客戶可能會被拒絕。
    請注意,每個連接建立的嘗試只需要短暫的時間,一旦連接建立起來,連接就不會受到限制的影響。
    所以您可以把這個值設置為10,只要不超過10個試圖在同一時間連接,會仍然有10,000個並發的活動連接。
  • Disabled:定義這個監聽是否被禁用。
  • RecvBufferSize:傳入數據的緩沖區的大小。
  • SendBufferSize:用於發送數據的緩沖區大小。

TCP監聽設置

  • FlowControlMaxQueuedBytes

  • DisableNagle:決定Nagle演算法是否在連接上使用。
    如果設置為true,則Nagle被禁用,出站的TCP數據將在到達TCP堆棧後立即發送。
    如果設置為false,那麼Nagle正在運行,TCP協議棧將嘗試將出站數據打包成更少的數據報。
    將此設置為 true 可能會改善您的TCP連接的延遲,但代價是會有更多的數據報被發送。

  • InactivityTimeout:伺服器在多長時間內斷開無響應的對象的連接。
    "0 "值意味著沒有超時。
    以毫秒為單位。

  • LoggingEnabled:定義這個監聽的日誌是否被啟用。

速率設置

  • RateLimitKBSec:
  • RateLimitRate:
  • RateLimitPeriod:

計數器設置

  • Counters:
  • CounterName:
  • ParentCounters:

自定義連接信息

  • CustomConnectMessagePrefix:Photon忽略了配置的字符串,如果它作為客戶端連接信息的prefix發送。
  • CustomConnectMessageSuffix:Photon忽略配置的字符串,如果它作為客戶端連接信息的suffix發送。
  • CustomConnectMessageIsRequired:如果設置為true,每條連接信息都需要一個自定義的prefix / suffix。

管理應用程序設置

  • OverrideApplication:任何連接到這個端口的客戶端都會在指定的應用程序中結束,無論客戶端連接到什麼。
  • DefaultApplication:是一個備案,以防客戶指定的應用程序沒有被找到。
  • MaxMessageSize:決定入站和出站信息允許的默認最大字節數。
  • MaxInboundMessageSize:確定伺服器通過該監聽器收到的消息可能具有的最大字節數。
    如果消息超過了MaxInboundMessageSize的限制,客戶端將被斷開與伺服器的連接。
    默認是MaxMessageSize的配置值。
  • MaxOutboundMessageSize
    確定伺服器通過該監聽器發送的消息可能具有的最大字節數。
    如果消息超過了MaxOutboundMessageSize的限制,客戶端將被斷開與伺服器的連接。
    默認是MaxMessageSize的配置值。
  • AppDataInactivityTimeout:如果應用程序(管理代碼)沒有得到任何數據,相對於低級別的(本地代碼)keep-alive pings的超時。

消息速率屬性

  • RateLimitMessagesSec:
  • MessageRateLimitPeriod:
  • MessageRateLimit:

HttpListeners

在v5中,WebSocketListeners和其他基於HTTP或Web的監聽被一個配置節點所取代。HttpListeners。
根據PeerType,監聽將用於一個特定的協議或變數。

  • Simple:用於通過Httplistener或RawHTTPListener節點配置。
  • Reliable:用於通過ReliableHttpListener節點配置。
  • WebSocket:用於通過WebSocketListener節點配置。

XML

<HTTPListeners>
      <HTTPListener
        Name="MyListenerNameShowsUpInPerfMon"
        IPAddress="0.0.0.0"
        IPAddressIPv6="::"
        Port="80"
        OverrideApplication = "WebSocketEchoApp"
        InactivityTimeout="5000"
        DisableNagle="true"
        Secure = "true"
        PeerType="Simple|Reliable|WebSocket"        
        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節點的特定屬性。

  • RouteCounterstruefalse
  • MaxUriLength:URI的最大長度。
  • MaxHeaderLength:請求頭的最大長度。
  • MaxHeaders:請求頭的最大數量。
  • MaxKeepAliveTime:允許保持連接的最大時間。
  • MaxKeepAliveRequests:在同一個保持動態連接中允許的最大請求。
  • CloseDelayMilliseconds:連接關閉的延遲。

路由節點的具體屬性。

  • SubProtocols:僅適用於WebSockets對等類型。
  • PingEvery:這個端點應該多長時間被ping一次。
    只適用於WebSockets對等類型。
    要求 "Ping "為 "true"。

HttpListener和Route節點之間共享的屬性。

  • Name:聽眾或路由的名稱。
  • PermittedOrigins:白名單的域。在v5 BETA中曾被稱為 "Access-Control-Allow-Origin",並設置同名的HTTP響應頭(CORS)。
  • Pingtruefalse,如果這個端點應該被Ping或不被Ping。
  • WebHooktruefalse,如果這個端點應該是一個WebHook。
  • Url:該端點的URL。

注意:默認情況下,路由級別的Windows性能計數器不會為具有單一路由的HTTP監聽創建。

Runtime Node

定義要使用的Photon Runtime組件。

XML

<Runtime
  Assembly="PhotonHostRuntime, Culture=neutral"
  Type="PhotonHostRuntime.PhotonDomainManager"
  UnhandledExceptionPolicy="TerminateProcess">
</Runtime>

廣義

廣義路徑

為了簡化路徑的配置,我們為最重要的文件夾提供了一組廣義。

  • [EXE]:包含伺服器可執行文件 "PhotonSocketServer.exe "的文件夾。
  • [CONFIG]:包含伺服器使用的配置文件的文件夾。
  • [DEPLOY][CONFIG]的父文件夾,即[CONFIG]\.
  • [CERTS]:默認的 "CertificatePath "值:[EXE]\certs

您可以使用來形成相對路徑。
這些廣義在伺服器啟動時被記錄在非管理的PhotonSocketServer日誌文件中:

Plain Old Text

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"

廣義可以通過PhotonServer實例設置用明確的路徑進行覆蓋:

  • PathMacro_EXE
  • PathMacro_CERTS

廣義計數器

路由級別的廣義計數器名稱可以包括以下:

  • [ADDRESS]:IP地址,例如:192.168.0.1。
  • [PORT]:端口號,例如:8080。
  • [full_address]:IP地址和端口。192.168.0.1:8080.
  • [ENDPOINT]:端點的名稱。
  • [PARENT]:端點的名稱或ParentCounters=""。

管理的SocketServer設置

您可以從應用程序層面上配置一些與PhotonSocketServer有關的設置。
這可以通過在應用程序各自的配置文件中添加一個可選的<SocketServer>節點/元素來完成,如下所示(該示例包括每個設置的默認值):

XML

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <Photon>
    <SocketServer SecurityProtocol = "Tls12|Tls13"
        Protocols = "GpBinaryV16,GpBinaryV18,Json"
        LogGuardOn = "true">
        <Limits MessageRate = "5000"
          MessageDataRate = "2147483647"
          MaxMessageSize = "512000"
          OnlyLogViolations = "false" />
        <S2S RpcProtocol = "GpBinaryV18" UseInitV3 = "false" />
    </SocketServer>
  </Photon>
</configuration>
  • SecurityProtocol:定義了伺服器應該使用的TLS版本。
    默認值是推薦的更安全的版本,因為TLS1.2和TLS1.3是目前的標准。
    只有在必要時才改變這個。
    可能的值。Ssl3|Tls|Tls11|Tls12|Tls13
    這設置了.NET的System.Net.ServicePointManager.SecurityProtocol
  • Protocols:定義了該伺服器應用程序可以使用哪些數據序列化協議。
  • `MessageRate':每個對象每秒允許的最大傳入消息數。
    默認為5000。
  • MessageDataRate:每個對象每秒允許的最大緩沖傳入數據的大小。
    默認為2147483647(int.MaxValue)。
  • MaxMessageSize:允許傳入信息的最大尺寸。
    默認為512000。
  • LogGuardOn:啟用或停用防止記錄垃圾郵件的防護。
  • OnlyLogViolations:定義違反限制時採取的措施:記錄違規或斷開對象的連接。
  • RpcProtocol:用於伺服器與伺服器之間通信的數據序列化協議。
  • UseInitV3:是否使用InitRequest版本3進行伺服器間的通信。
Back to top