KCP C#版。线程安全,运行时无alloc,对gc无压力。
$ dotnet add package Kcp开箱即用。也可以使用 Nuget 搜索。
KcpCore<Segment> where Segment : IKcpSegmentKcpIO<Segment> : KcpCore<Segment>, IKcpIO where Segment : IKcpSegmentKcp<Segment> : KcpCore<Segment> where Segment:IKcpSegmentc: skywind3000 KCP
go: xtaci kcp-go
Span<byte>简单的说:
不能在线程1调用Recv/Update时,线程2也在调用Recv/Update。函数内部使用大量共享数据结构,如果加锁严重影响性能。
可以在线程1调用Send/Input时,线程2也在调用Send/Input。函数内部有锁。
不可以多个线程同时调用Recv 和 Update。在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 | 删除了此函数(已内联) |