- 主题:突然想夸耀一下自己的成就
大佬,开源吗?拜读一下代码。
我一直找一个kcp的cpp实现
【 在 hgoldfish 的大作中提到: 】
:
: 我弄的 qtng 网络库,性能一般般。但是有一个功能算是比较炸裂的:实现了模块化的山寨 QUIC 协议。
:
: 这个山寨 QUIC 协议被我分成几部分:
:
#发自zSMTH@如有雷同 纯属巧合
--
FROM 123.122.162.*
官方的 kcp 只有算法,实际使用都需要自行封装包结构。我也是照着官方来的。不过需要自行处理缓存区,还有缓存区存太多数据,调用者需要暂停之类的。
我的代码在 github 上面。因为是建立在协程之上的,对你估计没啥参考价值。和一般的 cpp 回调代码很不一样。
https://github.com/hgoldfish/qtnetworkng/blob/master/src/kcp.cpp
举个例子,这一段代码,估计用回调就不好实现:
bool ok = sendingQueueNotFull.tryWait();
if (!ok) {
return -1;
}
qint32 nextBlockSize = qMin<qint32>(static_cast<qint32>(kcp->mss), size - count);
int result;
{
ScopedLock<RLock> l(kcpLock);
result = ikcp_send(kcp, data + count, nextBlockSize);
}
bool ok = sendingQueueNotFull.tryWait();
第一行的意思是如果缓冲区是满了,就暂停当时协程。
ScopedLock<RLock> l(kcpLock);
这一行的意思是如果当前还有另外一个协程正在发送 kcp 包,就等待它发送完,免得交叉发送数据。
【 在 newre 的大作中提到: 】
: 大佬,开源吗?拜读一下代码。
: 我一直找一个kcp的cpp实现
: #发自zSMTH@如有雷同 纯属巧合
: ...................
--
修改:hgoldfish FROM 110.81.1.*
FROM 110.81.1.*
很简单啊。服务端接到请求后,就给这个连接分配一个随机 ID,下次都是通过这个 ID 来找连接,而不是通过 tuple(ip, port),同时更新一下对端的地址。发送响应的时候才不会发错。
这个特性只是基于 UDP 的协议一个简单应用。如果 TCP 就不行了。
但有趣的事,UDP 的协议需要注意路由。如果你的机器有两个出口带宽,比如你接了两条宽带,此时可能会一会儿用这个宽带发 UDP 包,一会儿用另外一个宽带发 UDP 包。如果路由配置出错,这时候就可能会带宽加倍,也可能会让对端搞不清楚状况。
【 在 leoli2011 的大作中提到: 】
: 如何做到从5G到wifi 不中断的,能分享一下代码吗
--
FROM 110.81.1.*