1. 程式人生 > >幀同步的一些思考(四):Kcp 與 RakNet 測試比較

幀同步的一些思考(四):Kcp 與 RakNet 測試比較

測試程式碼

測試內容

伺服器以 66 毫秒 傳送 400 位元組的資料包,檢視客戶端前後 2 個包的時間間隔

弱網模擬

本次測試做以下2種測試:

  1. 伺服器輸出方向模擬

    類似:

    tc qdisc add dev $NETCARD root netem delay 100ms 20ms distribution normal loss $2%
  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
    0 flowid 1:1 action mirred egress redirect dev ifb0 tc qdisc add dev $NETCARD root netem delay 100ms 20ms distribution normal loss $2% tc qdisc add dev ifb0 root netem delay 100ms 20ms distribution normal loss $2%

完整指令碼:

為什麼測試 2 種模擬網路

雙向模擬更能測試可靠 UDP 庫的效能

可靠 UDP 庫,或多或少會有些ACK、控制指令由客戶端發起

因此雙向模擬更具實際參考意義

由於沒有實際網路 上行、下行引數可供參考, 這裡測試 上行、下行的延遲、丟包率均設定相同

而 伺服器輸出方向模擬(下行),原先做過 非可靠 UDP 庫測試 。這裡僅順帶測試一把。

測試結果 - 伺服器輸出方向模擬

  1. delay 100ms 20ms distribution normal loss 5%

    這裡寫圖片描述

  2. delay 100ms 20ms distribution normal loss 10%

    這裡寫圖片描述

  3. delay 100ms 20ms distribution normal loss 15%

    這裡寫圖片描述

測試結果 - 雙向模擬

  1. delay 100ms 20ms distribution normal loss 5%

    這裡寫圖片描述

  2. delay 100ms 20ms distribution normal loss 10%

    這裡寫圖片描述

  3. delay 100ms 20ms distribution normal loss 15%

    這裡寫圖片描述

結論

  • 客戶端收到前後 2 個包的時間間隔,Kcp 比 RakNet 更小些
  • RakNet 毛刺比 Kcp 多不少,特別是丟包率增大的情況

    總而言之,Kcp 在收發包延遲上要優於 RakNet