Giter Site home page Giter Site logo

kcp-go's Introduction

kcp-go

GoDoc Powered MIT licensed Build Status Go Report Card Coverage Statusd

Claude_Shannon

Introduction

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.

Features

  1. Optimized for Online Games, Audio/Video Streaming.
  2. Compatible with skywind3000's C version with optimizations.
  3. Cache friendly and Memory optimized design in golang.
  4. Compatible with net.Conn and net.Listener.
  5. FEC(Forward Error Correction) Support with Reed-Solomon Codes
  6. Packet level encryption support with AES, TEA, 3DES, Blowfish, Cast5, Salsa20, etc. in CFB mode.

Conventions

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.

Documentation

For complete documentation, see the associated Godoc.

Specification

Frame Format

Usage

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)

Performance

  型号名称:	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

Tuning

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.

Who is using this?

  1. https://github.com/xtaci/kcptun -- A Secure Tunnel Based On KCP over UDP.
  2. https://github.com/getlantern/lantern -- Lantern delivers fast access to the open Internet.
  3. https://github.com/smallnest/rpcx -- A RPC service framework based on net/rpc like alibaba Dubbo and weibo Motan.
  4. https://github.com/gonet2/agent -- A gateway for games with stream multiplexing.

Links

  1. https://github.com/xtaci/libkcp -- FEC enhanced KCP session library for iOS/Android in C++
  2. https://github.com/skywind3000/kcp -- A Fast and Reliable ARQ Protocol
  3. https://github.com/klauspost/reedsolomon -- Reed-Solomon Erasure Coding in Go

Support

You can support this project by the following methods:

  1. Vultr promotion code:
    http://www.vultr.com/?ref=6897065

  2. Paypal
    https://www.paypal.me/xtaci

Your name or github name will be listed on this page by default.

kcp-go's People

Contributors

audriusbutkevicius avatar xtaci avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.