HarmonyOS开发实战指南:kcp解决网络拥堵速度慢问题

167 篇文章 0 订阅
157 篇文章 0 订阅

kcp 是一种 ARQ 协议,可解决在网络拥堵情况下 tcp 协议的网络速度慢的问题

下载安装

直接在 OpenHarmony-SIG 仓中搜索 kcp 并下载。

使用说明

准备一套完整的 OpenHarmony 3.1 Beta 代码

  1. 库代码存放路径:./third_party/kcp

  2. 修改添加依赖的编译脚本

    在/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"
          ]
        }
      }
    }

  3. 用命令 ./build.sh --product-name rk3568 --ccache 编译

  4. 生成库文件路径:

    out/rk3568/common/common

    该路径会生成 test 可执行文件

接口说明

  1. 接收到下层协议 UDP 传进来的数据底层数据 buffer 转换成 kcp 的数据包格式 int ikcp_input(ikcpcb *kcp, const char *data, long size) KCP 报文分为 ACK 报文、数据报文、探测窗口报文、响应窗口报文四种。 kcp 报文的 una 字段(snd_una:第一个未确认的包)表示对端希望接收的下一个 kcp 包序号,也就是说明接收端已经收到了所有小于 una 序号的 kcp 包。解析 una 字段后需要把发送缓冲区里面包序号小于 una 的包全部丢弃掉

  2. 用户层面的数据读取

    ikcp_recv(ikcpcb *kcp, char *buffer, int len)

    首先合并 fragment,如果 rcv_queue 小于 rcv_wnd(接收窗口大小),则将 rcv_buf 中合适的 segment 放入 rcv_queue 中

  3. 将 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。

  4. 刷新待处理数据,待处理数据包括 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   #测试结果图
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KCP(Kuai Connection Protocol)是一种可靠的快速传输协议,适用于网络传输场景。在net项目中使用KCP可以带来如下好处: 1. 提高传输速度:KCP采用了传统TCP协议不具备的一些优势,如平滑的拥塞控制、快速重传和数据抓取等技术,可以在较高丢包率的网络环境下保持较高的传输速度,有效解决了TCP协议的一些传输效率和延迟问题。 2. 增强可靠性:KCP使用了UDP协议进行数据传输,但它在UDP基础上增加了一些可靠性机制,如数据确认、重传机制、窗口控制等,能够在不可靠的网络环境中保证数据的可靠传输,避免丢包和乱序等问题。 3. 降低延迟:KCP具有较低的传输延迟,能够减少发送数据和接收数据之间的时间差,提高数据传输的实时性,适合对延迟要求较高的应用场景,如在线游戏、语音通话等。 4. 自适应网络KCP网络环境发生变化时具有较好的自适应性,能够根据网络质量的变化来动态调整发送和接收的数据量,保持较稳定的传输效果,适合在具有不稳定网络环境的情况下使用。 5. 简单易用:KCP的实现相对简单,使用KCP协议进行网络传输的代码量较小,易于集成和使用,适合在开发网络传输模块时快速实现。 总之,net项目使用KCP可以带来优秀的传输性能、可靠性和较低的延迟,适用于各种网络传输需求,尤其适合在不稳定网络环境中保持较好的网络传输效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值