Client Server Connection Process
Fusion客戶端和伺服器之間的連接過程涉及多個階段,以建立可靠的同儕節點到同儕節點通信,通常使用Photon Cloud和STUN Service以穿越NAT(網路位址轉譯)環境。主要目標是在遊戲階段中的同儕節點之間建立直接連接,確保低延遲和高性能。
一般流程概述
- 遊戲階段開始、創建,及加入:
- 伺服器同儕節點使用Photon Cloud創建新遊戲階段。
- 客戶端請求透過Photon Cloud加入遊戲階段。
- 同儕節點發現和反射地址交換:
- 使用STUN(NAT的遊戲階段穿越公用程式)協定,客戶端和伺服器都會從外部STUN伺服器請求反射地址(外部、公共IP和埠)。這允許每個同儕節點識別其面向公共的地址,這對於透過NAT連接至關重要。
- 然後,反射資訊在同儕節點之間共享,在大多數情況下實現直接通信。
- 連線建立:
- 客户端嘗試使用反射資訊連接到伺服器。如果直接同儕節點到同儕節點(P2P)連接失敗,可以透過Photon Cloud中繼連接。
- 伺服器透過直接通訊端(UDP)或透過Photon Cloud的中繼來聽取連接請求。
- 成功連接後,客戶端和伺服器都開始交換遊戲更新。
- 處理連線失敗:
- 如果連接嘗試超過某個閾值,客戶端將關閉其網路操作並停止嘗試連接。
- 伺服器繼續聽取進一步的連接嘗試,無論是直接還是透過中繼服務,直到客戶端成功連接或中止該流程。
此流程確保客戶端和伺服器能夠可靠地連接和通信,而不論網路環境如何,必要時使用直接連接和中繼服務的組合。
核心元件
- STUN服務:向同儕節點提供反射資訊,允許它們透過NAT環境建立直接通信。
- Photon Cloud:管理遊戲階段的創建,在必要時中繼連接嘗試,並促進同儕節點發現。
遊戲階段創建和加入
下圖說明了遊戲階段創建和進一步設定的一般流程:
- 1. 伺服器以伺服器模式啟動遊戲。
- 2. 伺服器使用Photon Cloud創建新遊戲階段。
- 3. Photon Cloud確認遊戲階段創建。
- 4. 伺服器向Photon Cloud發送加入請求協定訊息。這用於使用與Fusion中的ClientServer模式相關的自訂屬性來設定遊戲階段。
- 5. Photon Cloud確認加入請求。
- 6. Photon Cloud請求伺服器啟動。
- 7. 伺服器啟動並初始化NetworkRunner。
- 8. 伺服器執行該過程以獲取本機網路位址。
- 9. 伺服器向STUN伺服器發送STUN請求。
- 10. 伺服器從STUN伺服器接收反射位址。
- 11. 伺服器將反射位址發送到Photon Cloud。
下圖說明了客戶端加入過程:
- 1. 客戶端以客戶端模式啟動遊戲。
- 2. 客戶端嘗試使用Photon Cloud加入隨機遊戲階段。
- 3. Photon Cloud確認遊戲階段加入。
- 4. 客戶端向Photon Cloud發送加入請求協定訊息。這用於在遊戲階段中登錄客戶端。
- 5. Photon Cloud確認加入請求。
- 6. Photon Cloud請求客戶端啟動。
- 7. 客戶端啟動並初始化NetworkRunner。
- 8. 客戶端執行該過程以獲取本機網路位址。
- 9. 客戶端向STUN伺服器發送STUN請求。
- 10. 客戶端從STUN伺服器接收反射位址。
- 11. 客戶端將反射位址發送到Photon Cloud。
連線過程流
下圖說明了Fusion客戶端和伺服器之間連接過程的一般流程。下方描述的所有步驟都是針對每次客戶端-伺服器連接嘗試而執行的。
以下是分步過程:
- 1. Photon Cloud將伺服器的反射位址發送給客戶端。
- 2. Photon Cloud將客戶端的反射位址發送到伺服器。
同時,客戶端和伺服器將執行以下步驟:
(客戶端側) 在每個連接嘗試間隔:
- 3. 如果嘗試小於連接嘗試限制的2/3,客戶端將嘗試使用公共反射位址連接到伺服器。
- 4. 否則,它會向Photon Cloud發送連接請求。
- 5. Photon Cloud將連接請求中繼到伺服器。
- 6. 如果達到連接嘗試限制,客戶端將停止嘗試連接並關閉其網路操作。
連接嘗試間隔固定為500ms,連接嘗試限制設定為10。
(伺服器端) 它聽取連接請求並執行以下步驟:
- 伺服器向客戶端的反射位址發送UDP ping封包。這用於以客戶端的反射位址來更新伺服器的本機網路路由器表,在某些情況下,這是建立直接連接所必需的,因為路由器可能會封鎖來自未知來源的傳入封包。
目前有兩種可能的結果:
(a) 客戶端可以直接與伺服器通信:
- 8. 伺服器透過預設接口接受來自客戶端的連接請求,這意味著已經建立了直接連接。
- 9. 然後,客戶端開始向伺服器發送遊戲更新。
(b) 或者可以透過Photon Cloud中繼連接:
- 10. 伺服器透過Photon Cloud中繼接受來自客戶端的連接請求。
- 11. 然後,Photon Cloud將連接確認中繼給客戶端。
- 12. 然後,客戶端開始透過Photon Cloud中繼向伺服器發送遊戲更新。
- 13. 伺服器透過Photon Cloud中繼從客戶端接收遊戲更新。
一旦建立連接,客戶端和伺服器可以直接或透過Photon Cloud中繼進行通信,具體取決於網路環境和直接連接嘗試的成功與否。
結論
Fusion客戶端和伺服器之間的連接過程是一個多階段的過程,涉及建立可靠的同儕節點到同儕節點通信的多種機制。透過利用Photon Cloud和STUN服務,Fusion可以確保客戶端和伺服器能夠有效地連接和通信,即使在具有NAT穿越要求的複雜網路環境中也是如此。
Back to top