kcp-go is a full-featured Reliable-UDP library for golang. It provides reliable, ordered, and error-checked delivery of a stream of octets between applications running on hosts communicating over an IP network.
- Optimized for Online Games, Audio/Video Streaming.
- Compatible with skywind3000's C version with optimizations.
- Cache friendly and Memory optimized design in golang.
- Compatible with net.Conn and net.Listener.
- FEC(Forward Error Correction) Support with Reed-Solomon Codes
- Packet level encryption support with AES, TEA, 3DES, Blowfish, Cast5, Salsa20, etc. in CFB mode.
Control messages like SYN/FIN/RST in TCP are not defined in KCP, you need some keepalive mechanims in the application-level. a real world example is to use some multiplexing protocol over session, such as smux, see kcptun for example.
For complete documentation, see the associated Godoc.
Client: full demo
kcpconn, err := kcp.DialWithOptions("192.168.0.1:10000", nil, 10, 3)
Server: full demo
lis, err := kcp.ListenWithOptions(":10000", nil, 10, 3)
型号名称: MacBook Pro
型号标识符: MacBookPro12,1
处理器名称: Intel Core i5
处理器速度: 2.7 GHz
处理器数目: 1
核总数: 2
L2 缓存(每个核): 256 KB
L3 缓存: 3 MB
内存: 8 GB
$ go test -run=^$ -v -bench .
beginning tests, encryption:salsa20, fec:10/3
BenchmarkAES128-4 200000 11286 ns/op 362.90 MB/s
BenchmarkAES192-4 100000 12332 ns/op 332.14 MB/s
BenchmarkAES256-4 100000 13490 ns/op 303.62 MB/s
BenchmarkTEA-4 50000 24191 ns/op 169.31 MB/s
BenchmarkXOR-4 5000000 389 ns/op 10516.55 MB/s
BenchmarkBlowfish-4 30000 46750 ns/op 87.61 MB/s
BenchmarkNone-4 20000000 66.2 ns/op 61870.86 MB/s
BenchmarkCast5-4 30000 60050 ns/op 68.21 MB/s
Benchmark3DES-4 2000 857810 ns/op 4.77 MB/s
BenchmarkTwofish-4 30000 56199 ns/op 72.88 MB/s
BenchmarkXTEA-4 20000 77454 ns/op 52.88 MB/s
BenchmarkSalsa20-4 300000 4896 ns/op 836.51 MB/s
BenchmarkEchoSpeed4K-4 5000 266582 ns/op 15.36 MB/s
BenchmarkEchoSpeed64K-4 1000 1800013 ns/op 36.41 MB/s
BenchmarkEchoSpeed512K-4 100 13474889 ns/op 38.91 MB/s
BenchmarkEchoSpeed1M-4 50 26673491 ns/op 39.31 MB/s
BenchmarkSinkSpeed4K-4 20000 68814 ns/op 59.52 MB/s
BenchmarkSinkSpeed64K-4 2000 896972 ns/op 73.06 MB/s
BenchmarkSinkSpeed256K-4 200 7370915 ns/op 71.13 MB/s
BenchmarkSinkSpeed1M-4 100 13908481 ns/op 75.39 MB/s
PASS
ok github.com/xtaci/kcp-go 37.789s
Q: I'm running > 3000 connections on my server. the CPU utilization is high.
A: A standalone agent
or gate
server for kcp-go is suggested, not only for CPU utilization, but also important to the precision of RTT measurements which indirectly affects retransmission. By increasing update interval
with SetNoDelay
like conn.SetNoDelay(1, 40, 1, 1)
will dramatically reduce system load.
- https://github.com/xtaci/kcptun -- A Secure Tunnel Based On KCP over UDP.
- https://github.com/getlantern/lantern -- Lantern delivers fast access to the open Internet.
- https://github.com/smallnest/rpcx -- A RPC service framework based on net/rpc like alibaba Dubbo and weibo Motan.
- https://github.com/gonet2/agent -- A gateway for games with stream multiplexing.
- https://github.com/xtaci/libkcp -- FEC enhanced KCP session library for iOS/Android in C++
- https://github.com/skywind3000/kcp -- A Fast and Reliable ARQ Protocol
- https://github.com/klauspost/reedsolomon -- Reed-Solomon Erasure Coding in Go
You can support this project by the following methods:
-
Vultr promotion code:
http://www.vultr.com/?ref=6897065 -
Paypal
https://www.paypal.me/xtaci
Your name or github name will be listed on this page by default.