开箱即用。也可以使用Nuget 搜索KCP。
- 异步API标准接口 IKcpIO.cs
- ValueTask Recv(IBufferWriter writer, object option = null);
- ValueTask Output(IBufferWriter writer, object option = null);
- 附带一个基本实现。KcpIO.cs
- kcpSegment泛型化,可由用户自定义高性能实现。
KcpCore<Segment>
where Segment : IKcpSegmentKcpIO<Segment>
:KcpCore<Segment>
, IKcpIO where Segment : IKcpSegmentKcp<Segment>
:KcpCore<Segment>
where Segment:IKcpSegment
c: skywind3000 KCP
go: xtaci kcp-go
- 内部使用了unsafe代码和非托管内存,不会对gc造成压力。
- 支持用户自定义内存管理方式,如果不想使用unsafe模式,可以使用内存池.
- 对于output回调和TryRecv函数。使用RentBuffer回调,从外部分配内存。请参考IMemoryOwner用法。
- 支持
Span<byte>
[已修复]同一个进程两个Kcp echo测试,至少使用3个线程,否则可能死锁。
在UnitTestProject1路径下执行 dotnet test 可进行多框架测试。(需要安装dotnetcoreSDK)
差异变化 | 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 | 删除了此函数(已内联) |