This document is about: FUSION 2
SWITCH TO

Client Server Connection Process

Fusion客戶端和伺服器之間的連接過程涉及多個階段,以建立可靠的同儕節點到同儕節點通信,通常使用Photon Cloud和STUN Service以穿越NAT(網路位址轉譯)環境。主要目標是在遊戲階段中的同儕節點之間建立直接連接,確保低延遲和高性能。

一般流程概述

  1. 遊戲階段開始、創建,及加入
  • 伺服器同儕節點使用Photon Cloud創建新遊戲階段。
  • 客戶端請求透過Photon Cloud加入遊戲階段。
  1. 同儕節點發現和反射地址交換
  • 使用STUN(NAT的遊戲階段穿越公用程式)協定,客戶端和伺服器都會從外部STUN伺服器請求反射地址(外部、公共IP和埠)。這允許每個同儕節點識別其面向公共的地址,這對於透過NAT連接至關重要。
  • 然後,反射資訊在同儕節點之間共享,在大多數情況下實現直接通信。
  1. 連線建立
  • 客户端嘗試使用反射資訊連接到伺服器。如果直接同儕節點到同儕節點(P2P)連接失敗,可以透過Photon Cloud中繼連接。
  • 伺服器透過直接通訊端(UDP)或透過Photon Cloud的中繼來聽取連接請求。
  • 成功連接後,客戶端和伺服器都開始交換遊戲更新。
  1. 處理連線失敗
  • 如果連接嘗試超過某個閾值,客戶端將關閉其網路操作並停止嘗試連接。
  • 伺服器繼續聽取進一步的連接嘗試,無論是直接還是透過中繼服務,直到客戶端成功連接或中止該流程。

此流程確保客戶端和伺服器能夠可靠地連接和通信,而不論網路環境如何,必要時使用直接連接和中繼服務的組合。

核心元件

  • STUN服務:向同儕節點提供反射資訊,允許它們透過NAT環境建立直接通信。
  • Photon Cloud:管理遊戲階段的創建,在必要時中繼連接嘗試,並促進同儕節點發現。

遊戲階段創建和加入

下圖說明了遊戲階段創建和進一步設定的一般流程:

Fusion Server Start and Session Creation Process
Fusion伺服器啟動和遊戲階段創建過程
  1. 1. 伺服器以伺服器模式啟動遊戲。
  2. 2. 伺服器使用Photon Cloud創建新遊戲階段。
  3. 3. Photon Cloud確認遊戲階段創建。
  4. 4. 伺服器向Photon Cloud發送加入請求協定訊息。這用於使用與Fusion中的ClientServer模式相關的自訂屬性來設定遊戲階段。
  5. 5. Photon Cloud確認加入請求。
  6. 6. Photon Cloud請求伺服器啟動。
  7. 7. 伺服器啟動並初始化NetworkRunner。
  8. 8. 伺服器執行該過程以獲取本機網路位址。
  9. 9. 伺服器向STUN伺服器發送STUN請求。
  10. 10. 伺服器從STUN伺服器接收反射位址。
  11. 11. 伺服器將反射位址發送到Photon Cloud。

下圖說明了客戶端加入過程:

Fusion Client Start and Join Process
Fusion客戶端啟動和加入過程
  1. 1. 客戶端以客戶端模式啟動遊戲。
  2. 2. 客戶端嘗試使用Photon Cloud加入隨機遊戲階段。
  3. 3. Photon Cloud確認遊戲階段加入。
  4. 4. 客戶端向Photon Cloud發送加入請求協定訊息。這用於在遊戲階段中登錄客戶端。
  5. 5. Photon Cloud確認加入請求。
  6. 6. Photon Cloud請求客戶端啟動。
  7. 7. 客戶端啟動並初始化NetworkRunner。
  8. 8. 客戶端執行該過程以獲取本機網路位址。
  9. 9. 客戶端向STUN伺服器發送STUN請求。
  10. 10. 客戶端從STUN伺服器接收反射位址。
  11. 11. 客戶端將反射位址發送到Photon Cloud。

連線過程流

下圖說明了Fusion客戶端和伺服器之間連接過程的一般流程。下方描述的所有步驟都是針對每次客戶端-伺服器連接嘗試而執行的。

Fusion Connection Process
Fusion連線過程

以下是分步過程:

  1. 1. Photon Cloud將伺服器的反射位址發送給客戶端。
  2. 2. Photon Cloud將客戶端的反射位址發送到伺服器。

同時,客戶端和伺服器將執行以下步驟:

(客戶端側) 在每個連接嘗試間隔:

  1. 3. 如果嘗試小於連接嘗試限制的2/3,客戶端將嘗試使用公共反射位址連接到伺服器。
  2. 4. 否則,它會向Photon Cloud發送連接請求。
  3. 5. Photon Cloud將連接請求中繼到伺服器。
  4. 6. 如果達到連接嘗試限制,客戶端將停止嘗試連接並關閉其網路操作。

連接嘗試間隔固定為500ms,連接嘗試限制設定為10。

(伺服器端) 它聽取連接請求並執行以下步驟:

  1. 伺服器向客戶端的反射位址發送UDP ping封包。這用於以客戶端的反射位址來更新伺服器的本機網路路由器表,在某些情況下,這是建立直接連接所必需的,因為路由器可能會封鎖來自未知來源的傳入封包。

目前有兩種可能的結果:

(a) 客戶端可以直接與伺服器通信:

  1. 8. 伺服器透過預設接口接受來自客戶端的連接請求,這意味著已經建立了直接連接。
  2. 9. 然後,客戶端開始向伺服器發送遊戲更新。

(b) 或者可以透過Photon Cloud中繼連接:

  1. 10. 伺服器透過Photon Cloud中繼接受來自客戶端的連接請求。
  2. 11. 然後,Photon Cloud將連接確認中繼給客戶端。
  3. 12. 然後,客戶端開始透過Photon Cloud中繼向伺服器發送遊戲更新。
  4. 13. 伺服器透過Photon Cloud中繼從客戶端接收遊戲更新。

一旦建立連接,客戶端和伺服器可以直接或透過Photon Cloud中繼進行通信,具體取決於網路環境和直接連接嘗試的成功與否。

結論

Fusion客戶端和伺服器之間的連接過程是一個多階段的過程,涉及建立可靠的同儕節點到同儕節點通信的多種機制。透過利用Photon Cloud和STUN服務,Fusion可以確保客戶端和伺服器能夠有效地連接和通信,即使在具有NAT穿越要求的複雜網路環境中也是如此。

Back to top