在實時性方面,tcp協議的網路抗性欠佳,對MOBA類或其他實時性要求較高的遊戲,一般是不建議使用tcp作為協議載體。事實上,王者榮耀的PVP通訊協議也確實是基於udp封裝的;同樣,最近大家喜聞樂見的《絕地求生》,也是基於udp的。 不同型別的遊戲因為玩法、競技程度不一樣,採用的同步演算法不一樣,對網路延遲的要求也不一樣。例如,MOBA類遊戲多使用幀同步為主要同步演算法,競技性也較高,無論從流暢性,還是從公平性要求來說,對響應延遲的要求都最高,根據業內經驗,當客戶端與伺服器的網路延遲超過150ms時,會開始出現卡頓,當延遲超過250ms時,會對玩家操作造成較大影響,遊戲無法公平進行。類似地,“吃雞”遊戲(如《絕地求生》)玩法對玩家座標、動作的同步要求極高,延遲稍大導致的資料不一致對體驗都會造成較大影響,其實時性要求接近MOBA類遊戲。而對於傳統mmorpg來說,多采用狀態同步演算法,以屬性養成和裝備獲取為關注點,也有一定競技性,出於對遊戲流暢性的要求,對延遲也有一定要求,同步演算法的最佳化程度不一樣,這一要求也不一樣,一般情況下為保證遊戲正常進行,需要響應延遲保持在300ms以下。相比之下,對於爐石傳說、鬥地主、夢幻西遊等回合制遊戲來說,同時只有一個玩家在操作雙方資料,無資料競爭,且時間粒度較粗,甚至可透過特效掩蓋延遲,因此對網路延遲的要求不高,即便延遲達到500ms~1000ms,遊戲也能正常進行。 不同傳輸層協議在可靠性、流量控制等方面都有差別,而這些技術細節會對延遲造成影響。tcp追求的是完全可靠性和順序性,丟包後會持續重傳直至該包被確認,否則後續包也不會被上層接收,且重傳採用指數避讓策略,決定重傳時間間隔的RTO(retransmission timeout)不可控制,linux核心實現中最低值為200ms,這樣的機制會導致丟包率短暫升高的情況下應用層訊息響應延遲急劇提高,並不適合實時性高、網路環境複雜的遊戲。 除了這些以外,這裡有一位行業資深架構師寫了關於這個問題的分析《關於MOBA遊戲的tcp協議—實測資料》,推薦給你可以參考下。
在實時性方面,tcp協議的網路抗性欠佳,對MOBA類或其他實時性要求較高的遊戲,一般是不建議使用tcp作為協議載體。事實上,王者榮耀的PVP通訊協議也確實是基於udp封裝的;同樣,最近大家喜聞樂見的《絕地求生》,也是基於udp的。 不同型別的遊戲因為玩法、競技程度不一樣,採用的同步演算法不一樣,對網路延遲的要求也不一樣。例如,MOBA類遊戲多使用幀同步為主要同步演算法,競技性也較高,無論從流暢性,還是從公平性要求來說,對響應延遲的要求都最高,根據業內經驗,當客戶端與伺服器的網路延遲超過150ms時,會開始出現卡頓,當延遲超過250ms時,會對玩家操作造成較大影響,遊戲無法公平進行。類似地,“吃雞”遊戲(如《絕地求生》)玩法對玩家座標、動作的同步要求極高,延遲稍大導致的資料不一致對體驗都會造成較大影響,其實時性要求接近MOBA類遊戲。而對於傳統mmorpg來說,多采用狀態同步演算法,以屬性養成和裝備獲取為關注點,也有一定競技性,出於對遊戲流暢性的要求,對延遲也有一定要求,同步演算法的最佳化程度不一樣,這一要求也不一樣,一般情況下為保證遊戲正常進行,需要響應延遲保持在300ms以下。相比之下,對於爐石傳說、鬥地主、夢幻西遊等回合制遊戲來說,同時只有一個玩家在操作雙方資料,無資料競爭,且時間粒度較粗,甚至可透過特效掩蓋延遲,因此對網路延遲的要求不高,即便延遲達到500ms~1000ms,遊戲也能正常進行。 不同傳輸層協議在可靠性、流量控制等方面都有差別,而這些技術細節會對延遲造成影響。tcp追求的是完全可靠性和順序性,丟包後會持續重傳直至該包被確認,否則後續包也不會被上層接收,且重傳採用指數避讓策略,決定重傳時間間隔的RTO(retransmission timeout)不可控制,linux核心實現中最低值為200ms,這樣的機制會導致丟包率短暫升高的情況下應用層訊息響應延遲急劇提高,並不適合實時性高、網路環境複雜的遊戲。 除了這些以外,這裡有一位行業資深架構師寫了關於這個問題的分析《關於MOBA遊戲的tcp協議—實測資料》,推薦給你可以參考下。