-
Notifications
You must be signed in to change notification settings - Fork 2.5k
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
丢包率为1%时候,有时候延迟会变得越来越大,无法恢复 #93
Comments
基础知识啊,这叫缓存积累延迟,请检测 ikcp_waitsnd,发送端超过一定阈值就不要调用 ikcp_send了, 你已经没能力发送了,还持续不断的追加数据到 sndbuf,当然会越来越慢,你总不可能幻想无止尽调用 ikcp_send 对方都能实时收到吧?那你这不突破物理带宽极限了?
你只有两个解决方法:
你们看看 TCP网络编程相关资料吧,但凡知道 EAGAIN / EWOULDBLOCK 是怎么回事情的人都不会无止境的调用 send。 |
感谢你的解答! libkcp.ikcp_wndsize(self._kcp, 2048, 2048) |
TCP,Windows 下,默认 SNDBUF 8KB,每秒30次,每次400字节,1%的丢包,RTT稍微大点,20多秒也就BLOCK掉了。 |
不是发送频率的问题,是ack报文丢了的缘故。 |
这是我用tc命令设置服务器网络有1%的丢包率时候测的
tc qdisc add dev eth1 root netem delay 0ms 10ms 1% loss 1%
测试程序每秒30次地随机发送100、200、400Byte大小的数据,发现kcp偶尔会出现延迟不断变大再也无法恢复。测试程序使用python ctypes直接调用kcp编译出来的动态库,一般时候表现良好。
主要用了下面这些参数
libkcp.ikcp_nodelay(self._kcp, 1, 10, 2, 1)
libkcp.ikcp_wndsize(self._kcp, 2048, 2048)
def update(self, now_time):
ikcp_update(self._kcp, c_int(int(now_time*1000)))
问下什么情况可能导致这种现象,需要怎么避免?可能的话可以把测试程序和测试方法发过去。
The text was updated successfully, but these errors were encountered: