Open haozia816 opened 5 months ago
你这用KCP用错了场景了吧
------------------ 原始邮件 ------------------ 发件人: "skywind3000/kcp" @.>; 发送时间: 2024年3月21日(星期四) 下午4:34 @.>; @.***>; 主题: [skywind3000/kcp] KCP在高延迟环境下怎样使用才能满足大流量,而不是快速响应? (Issue #406)
我们需要同时工作在TCP和UDP协议中,所以选择了使用KCP,但是我的软件中还需要传输文件,我测试了在高延迟(1s)环境中,TCP协议、2048的窗口也只能达到400k左右的速度,还经常出现传输中断,ikcp_input后KCP再无任何响应。请问在高延迟环境中,只要求大流量而不要求快速响应我应该怎么使用呢?
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>
自己再 issue 里翻翻,别人传输速度比你这个快。
自己再 issue 里翻翻,别人传输速度比你这个快。
麻烦大神指导下呢,没有找到相似的issue,我是asio实现的,下面是伪代码
boost::asio::stready_timer m_timer;
void active_update()
{
ikcp_update(m_kcp);
m_timer.expires_at(ikcp_check(m_kcp));
m_timer.async_wait([]
{
active_update();
});
}
//实例启动
void start()
{
//开启周期性update
active_update();
}
//网络接收到数据
void handle_recv(const uint8_t* data, size_t size)
{
ikcp_input(m_kcp, data, size);
while (true)
{
int len = ikcp_recv(m_kcp, buffer1);
if(len == -1)
{
break; //无可用数据,结束while循环
}
//处理KCP接收到的数据,存储在buffer1中
......
}
while (ikcp_waitsnd(m_kcp) < m_kcp->snd_wnd * 2)
{
//发送队列未满,继续读取文件发送
if (pf) //FILE* pf;
{
fread(buffer2, 1, m_kcp->mss, pf);
ikcp_send(m_kcp, buffer2, m_kcp->mss);
active_update(); //测试过这里只能执行ikcp_update,执行ikcp_flush的话,数据不会立刻发送
}
else
{
break;
}
}
}
我们需要同时工作在TCP和UDP协议中,所以选择了使用KCP,但是我的软件中还需要传输文件,我测试了在高延迟(1s)环境中,TCP协议、2048的窗口也只能达到400k左右的速度,还经常出现传输中断,ikcp_input后KCP再无任何响应。请问在高延迟环境中,只要求大流量而不要求快速响应我应该怎么使用呢? 无延迟环境测试为16M/S