MIT License

项目介绍

KumoKyaku/kcp 是一个托管在 GitHub 上的开源项目,主要使用 C# 编写,采用 MIT License 许可证,目前获得 1.0k 个 Star、152 次 Fork。

仓库全名
KumoKyaku/kcp
开源许可证
MIT License
Star 数
1.0k
Fork 数
152
未关闭 Issue
3

README 摘要

KCP C#版 开箱即用。也可以使用 Nuget 搜索。 Feature: 异步API标准接口 IKcpIO.cs ValueTask Recv(IBufferWriter writer, object option = null); ValueTask Output(IBufferWriter writer, object option = null); 附带一个基本实现。KcpIO.cs kcpSegment泛型化,可由用户自定义高性能实现。 KcpCore where Segment : IKcpSegment KcpIO : KcpCore , IKcpIO where Segment : IKcpSegment Kcp : KcpCore where Segment:IKcpSegment 链接: c: skywind3000 KCP go: xtaci kcp-go 说明: 内部使用了unsafe代码和非托管内存…

完整内容见 GitHub 原始 README 或本页 。

常见问题

kcp 用什么语言开发?

主要使用 C# 编写,采用 MIT License 许可证,目前有 1.0k 个 Star。

kcp 可以免费商用吗?

仓库采用 MIT License 许可证,可免费使用与修改,商业使用请遵守许可证条款(例如保留版权声明与许可声明)。

如何获取 kcp 的源码?

可以直接克隆仓库:git clone https://github.com/KumoKyaku/kcp.git,默认分支为 master;安装与运行步骤见仓库 README。

kcp 最近还在维护吗?

仓库最近一次更新为 2023年11月16日,当前有 3 个未关闭 Issue;Star 数为 1.0k,可作为社区活跃度的参考。

简要分析

热度分
1334
价值分
650
活跃状态
活跃

语言占比

C#

README

KCP C#版

开箱即用。也可以使用 Nuget 搜索。

Nuget

Feature:

  • 异步API标准接口 IKcpIO.cs
    • ValueTask Recv(IBufferWriter writer, object option = null);
    • ValueTask Output(IBufferWriter writer, object option = null);
    • 附带一个基本实现。KcpIO.cs
  • kcpSegment泛型化,可由用户自定义高性能实现。
    • KcpCore<Segment> where Segment : IKcpSegment
    • KcpIO<Segment> : KcpCore<Segment>, IKcpIO where Segment : IKcpSegment
    • Kcp<Segment> : KcpCore<Segment> where Segment:IKcpSegment

链接:

c: skywind3000 KCP
go: xtaci kcp-go

说明:

  • 内部使用了unsafe代码和非托管内存,不会对gc造成压力。
  • 支持用户自定义内存管理方式,如果不想使用unsafe模式,可以使用内存池.
  • 对于output回调和TryRecv函数。使用RentBuffer回调,从外部分配内存。请参考IMemoryOwner用法。
  • 支持Span<byte>

线程安全

简单的说:
不能在线程1调用Recv/Update时,线程2也在调用Recv/Update。函数内部使用大量共享数据结构,如果加锁严重影响性能。
可以在线程1调用Send/Input时,线程2也在调用Send/Input。函数内部有锁。

  • 可以在任意多线程同时调用Send 和 Input。
    多线程同时发送消息是安全的,可以放心的在异步函数中发送消息。
  • 但不可以多个线程同时调用Recv 和 Update。
    同名方法仅支持一个线程同时调用,否则会导致多线程错误。

测试:

在UnitTestProject1路径下执行 dotnet test 可进行多框架测试。(需要安装dotnetcoreSDK)

相对C版的一些变化:

差异变化 C版 C#版
数据结构
acklist 数组 ConcurrentQueue
snd_queue 双向链表 ConcurrentQueue
snd_buf 双向链表 LinkedList
rcv_buf 双向链表 LinkedList
rcv_queue 双向链表 List
-------------- -------------- --------------
回调函数 增加了RentBuffer回调,当KCP需要时可以从外部申请内存。
多线程 增加了线程安全。
流模式 由于数据结构变动,流模式不会填充当前未发送的最末的数据包。
interval最小间隔 10ms 0ms(在特殊形况下允许CPU满负荷运转)
-------------- -------------- --------------
API变动
增加大小端编码设置。默认小端编码。
增加TryRecv函数,当可以Recv时只peeksize一次。
ikcp_ack_push 删除了此函数(已内联)
ikcp_ack_get 删除了此函数(已内联)

评论

暂无评论