Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

热点网络下的kcp表现 #425

Open
Haoson opened this issue Sep 6, 2024 · 5 comments
Open

热点网络下的kcp表现 #425

Haoson opened this issue Sep 6, 2024 · 5 comments

Comments

@Haoson
Copy link

Haoson commented Sep 6, 2024

@skywind3000 伟哥好。我这边继续来输出一个实际线上用例。有一个玩家,他用荣耀手机的流量开了一个热点,ipad连上这个热点玩游戏。热点用的5G频段。湖南电信的流量。
神奇的是,在这种热点网络下,网络抖动大。tcp表现比kcp好,kcp延迟非常大,几秒到十几秒的延迟都有,tcp只是延迟波动大,但是实际体验是比kcp好很多。为啥呢,理论上这种网络下kcp应该表现更好啊

@skywind3000
Copy link
Owner

KCP 开了 nodelay 没有?关掉流控没有?设置 interval 没有?处理包积累没有?

@Haoson
Copy link
Author

Haoson commented Sep 9, 2024

ikcp_nodelay(kcp_instance, 1, 10, 0, 1);

如果真的是因为包累积,我做了watermark,会监测并且断开连接。

@skywind3000
Copy link
Owner

skywind3000 commented Sep 9, 2024

试试:ikcp_nodelay(kcp_instance, 2, 1, 1, 1);
然后:kcp_instance 对象的 snd_wnd 和 rcv_wnd 设置成 1024,

先确定以下,把发送端的每秒打印 ikcp_waitsnd() 的结果,看看是不是在持续变大。
再确认下,接收端每次开始接收时是 while 循环调用 ikcp_recv 直到没数据才 break,进入 sleep?

@Haoson
Copy link
Author

Haoson commented Sep 9, 2024

试试: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才停止,所以消耗这块理论是没有问题。

@skywind3000
Copy link
Owner

最好不要多线程同时操作一个 kcp 对象,操作也要加锁。另外注意,数据在各个环节是否能够即时投递。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants