親愛的各位讀者你們好,由于前段時間忙于部分項目的重構和優化,未能及時更新文章,不少讀者催更,哈哈,我還是很開心能抽出時間給大家再來分享下kcp的相關技術內幕,以及之前完善自己的網絡庫增加了KCP的客戶端服務器收發支持(結尾會分享封裝的客戶端服務器C++源碼)。
KCP概述
對于游戲開發,尤其是MOBA游戲,或者全球唯一服架構類型的游戲,對于網絡的要求比一般游戲要高。
大多數游戲公司使用的網絡無非就是TCP,UDP。我們都知道 TCP 協議具有重傳機制,也就是說,如果發送方認為發生了丟包現象,就重發這些數據包。很顯然,我們需要一個方法來猜測是否發生了丟包。最簡單的想法就是,接收方每收到一個包,就向發送方返回一個 ACK,表示自己已經收到了這段數據,反過來,如果發送方一段時間內沒有收到 ACK,就知道很可能是數據包丟失了,緊接著就重發該數據包,直到收到 ACK 為止。因為即使是超時了,這個數據包也可能并沒有丟,它只是繞了一條遠路,來的很晚而已。畢竟 TCP 協議是位于傳輸層的協議,不可能明確知道數據鏈路層和物理層發生了什么。但這并不妨礙我們的超時重傳機制,因為接收方會自動忽略重復的包。
超時和重傳的概念其實就是這么簡單,但內部的細節卻是很多,我們最先想到的一個問題就是,到底多長時間才能算超時呢?
超時是怎么確定的?