重新串連HRC +
由於SmartFoxServer 2X版本2.5(及更高版本)引入了高彈性串連系統(HRC +)的改進版本,使得玩家可以在突然中斷連線後重新加入伺服器,而不會丟失其目前狀態。
在本文中,我們將討論HRC +可以節省大量開發工作的方式,技術方面的做法以及如何配置和測試。
為什麼我斷開連線。
在本網開發與測試時,意外的中斷連線是非常罕見的事情,但是當我們終於上網時,可能會發生幾個可能會影響遊戲串連的惡作劇。
串連在沒有通知的情況下丟棄的主要原因是交通擁堵。播放器串連通常通過幾十個網路節點到達目的地,並且這些連結中的每一個都可能是潛在的故障點。事實上,如果這些路由器和網關中的任何一個都被流量壓倒了,它們可能會響應太慢,被迫丟棄資料包或重設,從而導致失速並最終中斷連線。
如果我們添加混合WIFI和移動串連,情境變得更加細膩,因為訊號強度的下降可能導致與遊戲伺服器的突然斷開。
所有這些情況主要在作業系統的TCP堆棧中處於低層級,TCP堆棧又會在應用程式層級調度其他程式可以做出的響應。 SmartFoxServer 2X在這些方面也不例外,它在很大程度上取決於那些低層級的通知。
在這篇文章的後面,我們將看到如果某些事件沒有及時解決,可能會發生什麼。
»HRC +救援
HRC +是SmartFoxServer 2X提供的獨特功能,可協助構建更強大的多使用者遊戲,讓玩家透明地返回遊戲而不會失去其狀態。
下圖說明當播放器突然斷開與伺服器的串連時會發生什麼:
從左側開始,我們有三個使用者串連到SFS2X,所有玩家一起玩在同一個地區中的玩家A,B,C。突然使用者B失去串連,伺服器上的Player對象被凍結,所有發送給他的訊息都儲存在隊列中。
同時,用戶端API正在嘗試建立一個新的串連,而其他玩家可以繼續他們的遊戲,知道使用者B試圖跳回來。
在圖的右側,玩家B終於重新串連。新的會話與舊的Player對象連結,用戶端被更新為所有排隊的訊息,其他玩家被通知B已經回來了。令人興奮的部分是,在所有這些階段,遊戲流程不會中斷,並且重新串連的所有複雜性都從開發人員隱藏起來。
»可能會出錯
並不是所有的中斷連線都相等。斷斷續續可能存在一段時間的少數情況,不能觸發重連繫統。
我們將文檔的整個部分專用於Ghost Connections的問題,這是我們調用“半封閉”TCP串連的方式。沒有太多的細節,TCP協議採用多個訊息交換來斷開用戶端和伺服器。在網路突然停用情況下,無法完成此交換,並且TCP串連可以在一段時間內保持在“等待”狀態。
這種情況的典型原因是從電腦拉出網路電纜或WIFI介面或移動串連中的訊號突然丟失。在所有這些情況下,最終可能會出現一個ghost串連,TCP串連仍然在等待關閉操作完成。
為何HRC +功能如此相關。這是至關重要的,因為在此狀態下的TCP通訊端將不會在應用程式層級通知任何中斷連線事件,因此SmartFoxServer將不會意識到此新條件。最終,TCP逾時或SmartFox空閑通訊端逾時將觸發(取決於更早的啟動),並且將中斷連線事件。
不要拔掉電源
»正確的中斷連線測試方法
反向拔除網路電纜或關閉WiFi串連不會產生可用於測試的突然中斷連線。
事實上,您可以使用Netstat公用程式(Windows,Mac和Linux上可用)在拔下電纜之前和之後監視電腦的串連,並且您會驚訝地發現沒有任何變化。
重要訊息:請勿嘗試通過拔出乙太網路電纜或關閉WIFI串連來測試重新串連系統。兩個操作都不會終止您當前的通訊端串連,因此斷開事件將永遠不會被觸發。
而是按照我們在下面部分連結的題為“串連階段”的文章中提供的說明。
»進一步閱讀
有關如何配置和測試HRC +的更多資訊,請參見“開發基礎”部分中的串連階段。為了進一步瞭解TCP / IP如何處理中斷連線,您可以閱讀此外部文章
翻譯自http://docs2x.smartfoxserver.com/GettingStarted/reconnection-hrc-plus