kcp 是一种 ARQ 协议,可解决在网络拥堵情况下 tcp 协议的网络速度慢的问题
下载安装
直接在 OpenHarmony-SIG 仓中搜索 kcp 并下载。
使用说明
准备一套完整的 OpenHarmony 3.1 Beta 代码
-
库代码存放路径:./third_party/kcp
-
修改添加依赖的编译脚本
在/developtools/bytrace_standard/ohos.build 文件中添加以下修改:
{
"subsystem": "developtools",
"parts": {
"bytrace_standard": {
"module_list": [
"//developtools/bytrace_standard/interfaces/innerkits/native:bytrace_core",
"//developtools/bytrace_standard/bin:bytrace_target",
"//developtools/bytrace_standard/bin:bytrace.cfg",
"//developtools/bytrace_standard/interfaces/kits/js/napi:bytrace",
"//third_party/kcp:kcp_targets"
],
"inner_kits": [
{
"type": "so",
"name": "//developtools/bytrace_standard/interfaces/innerkits/native:bytrace_core",
"header": {
"header_files": [
"bytrace.h"
],
"header_base": "//developtools/bytrace_standard/interfaces/innerkits/native/include"
}
}
],
"test_list": [
"//developtools/bytrace_standard/bin/test:unittest"
]
}
}
}
-
用命令 ./build.sh --product-name rk3568 --ccache 编译
-
生成库文件路径:
out/rk3568/common/common
该路径会生成 test 可执行文件
接口说明
-
接收到下层协议 UDP 传进来的数据底层数据 buffer 转换成 kcp 的数据包格式
int ikcp_input(ikcpcb *kcp, const char *data, long size)
KCP 报文分为 ACK 报文、数据报文、探测窗口报文、响应窗口报文四种。 kcp 报文的 una 字段(snd_una:第一个未确认的包)表示对端希望接收的下一个 kcp 包序号,也就是说明接收端已经收到了所有小于 una 序号的 kcp 包。解析 una 字段后需要把发送缓冲区里面包序号小于 una 的包全部丢弃掉 -
用户层面的数据读取
ikcp_recv(ikcpcb *kcp, char *buffer, int len)
首先合并 fragment,如果 rcv_queue 小于 rcv_wnd(接收窗口大小),则将 rcv_buf 中合适的 segment 放入 rcv_queue 中
- 将 buffer 中的数据发送,把要发送的 buffer 分片成 KCP 的数据包格式,插入待发送队列中
ikcp_send(ikcpcb *kcp, const char *buffer, int len)
当用户的数据超过一个 mss(最大分片大小)的时候,会对发送的数据进行分片处理。KCP 采用的是流的方式进行分片处理
如果需要发送的数据大小大于 mss,则将其拆分为多个 segment 发送,将其 frg 至为其相应的序号,序号从 count-1 开始递减至 0,即 count-1 表示第一个 segment,0 表示最后一个 segment。
- 刷新待处理数据,待处理数据包括 ack,win probe,push data 等等,以及检测 snd_buf 中的数据是否需要重传
ikcp_flush(ikcpcb *kcp)
约束与限制
在下述版本验证通过:DevEco Studio: 3.1 Beta1,OpenHarmony SDK: API9。
目录结构
|---- kcp
| |---- ikcp.c #kcp的主要实现逻辑
| |---- test.c #测试代码文件
| |---- screenshot #测试结果图
如果想更深入的学习 OpenHarmony (鸿蒙南向)全栈开发的内容,可以参考以下学习文档:
OpenHarmony 开发环境搭建:https://qr18.cn/CgxrRy
《OpenHarmony源码解析》:https://qr18.cn/CgxrRy
- 搭建开发环境
- Windows 开发环境的搭建
- Ubuntu 开发环境搭建
- Linux 与 Windows 之间的文件共享
- ……
系统架构分析:https://qr18.cn/CgxrRy
- 构建子系统
- 启动流程
- 子系统
- 分布式任务调度子系统
- 分布式通信子系统
- 驱动子系统
- ……
OpenHarmony 设备开发学习手册:https://qr18.cn/CgxrRy
OpenHarmony面试题(内含参考答案):https://qr18.cn/CgxrRy
写在最后
- 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
- 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:
https://gitee.com/MNxiaona/733GH