幀同步的一些思考(四):Kcp 與 RakNet 測試比較
阿新 • • 發佈:2018-12-30
測試程式碼
測試內容
伺服器以 66 毫秒 傳送 400 位元組的資料包,檢視客戶端前後 2 個包的時間間隔
弱網模擬
本次測試做以下2種測試:
伺服器輸出方向模擬
類似:
tc qdisc add dev $NETCARD root netem delay 100ms 20ms distribution normal loss $2%
雙向模擬
類似:
modprobe ifb ip link set dev ifb0 up tc qdisc add dev $NETCARD ingress tc filter add dev $NETCARD parent ffff: protocol ip u32 match u32 0
完整指令碼:
為什麼測試 2 種模擬網路
雙向模擬更能測試可靠 UDP 庫的效能
可靠 UDP 庫,或多或少會有些ACK、控制指令由客戶端發起
因此雙向模擬更具實際參考意義
由於沒有實際網路 上行、下行引數可供參考, 這裡測試 上行、下行的延遲、丟包率均設定相同
而 伺服器輸出方向模擬(下行),原先做過 非可靠 UDP 庫測試 。這裡僅順帶測試一把。
測試結果 - 伺服器輸出方向模擬
delay 100ms 20ms distribution normal loss 5%
delay 100ms 20ms distribution normal loss 10%
delay 100ms 20ms distribution normal loss 15%
測試結果 - 雙向模擬
delay 100ms 20ms distribution normal loss 5%
delay 100ms 20ms distribution normal loss 10%
delay 100ms 20ms distribution normal loss 15%
結論
- 客戶端收到前後 2 個包的時間間隔,Kcp 比 RakNet 更小些
RakNet 毛刺比 Kcp 多不少,特別是丟包率增大的情況
總而言之,Kcp 在收發包延遲上要優於 RakNet