kcp
kcp copied to clipboard
热点网络下的kcp表现
@skywind3000 伟哥好。我这边继续来输出一个实际线上用例。有一个玩家,他用荣耀手机的流量开了一个热点,ipad连上这个热点玩游戏。热点用的5G频段。湖南电信的流量。 神奇的是,在这种热点网络下,网络抖动大。tcp表现比kcp好,kcp延迟非常大,几秒到十几秒的延迟都有,tcp只是延迟波动大,但是实际体验是比kcp好很多。为啥呢,理论上这种网络下kcp应该表现更好啊
KCP 开了 nodelay 没有?关掉流控没有?设置 interval 没有?处理包积累没有?
ikcp_nodelay(kcp_instance, 1, 10, 0, 1);
如果真的是因为包累积,我做了watermark,会监测并且断开连接。
试试:ikcp_nodelay(kcp_instance, 2, 1, 1, 1); 然后:kcp_instance 对象的 snd_wnd 和 rcv_wnd 设置成 1024,
先确定以下,把发送端的每秒打印 ikcp_waitsnd() 的结果,看看是不是在持续变大。 再确认下,接收端每次开始接收时是 while 循环调用 ikcp_recv 直到没数据才 break,进入 sleep?
试试:ikcp_nodelay(kcp_instance, 2, 1, 1, 1); 然后:kcp_instance 对象的 snd_wnd 和 rcv_wnd 设置成 1024,
先确定以下,把发送端的每秒打印 ikcp_waitsnd() 的结果,看看是不是在持续变大。 再确认下,接收端每次开始接收时是 while 循环调用 ikcp_recv 直到没数据才 break,进入 sleep?
好的,感谢。 我补充下,目前snd_wnd是256,rcv_wnd是512。 我这边模型比较复杂,多线程模型,简单来说,我会把收到的单个instance所属的包全部消耗完的,直到ikcp_peeksize<=0才停止,所以消耗这块理论是没有问题。
最好不要多线程同时操作一个 kcp 对象,操作也要加锁。另外注意,数据在各个环节是否能够即时投递。