Fork of with faster RS codec and highwayhash for checksums
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Loki Verloren 611b51eba5
fixed modules
4 months ago
.idea fixed modules 4 months ago
_documents add qq tech support group for those companies that are using rpcx 1 year ago
_testutils modify thrift package name in tests 1 year ago
assets tidied up readme a bit to start with 8 months ago
client updated to kcp9 repo for kcp 4 months ago
codec fixed urls 8 months ago
errors #258 fix errors in Broadcast 1 year ago
log use stdout as the default log output 1 year ago
protocol updating, added rudp tag make, redirected to main repo 8 months ago
server updated to kcp9 repo for kcp 4 months ago
serverplugin updating, added rudp tag make, redirected to main repo 8 months ago
share updating, added rudp tag make, redirected to main repo 8 months ago
tool/xgen fixed urls 8 months ago
util implement metadata 2 years ago
.gitignore update go module 9 months ago
.travis.yml fixed urls 8 months ago #314 add Pool for XClient and OneClient 10 months ago
LICENSE add license 4 months ago
Makefile fixed urls 8 months ago fixed urls 8 months ago
crypt.go simplify buffer creation in cryptos 1 year ago
crypt_test.go reset timer before entering the crypto benchmark loop 1 year ago
entropy.go lint 1 year ago
fec.go len->cap 8 months ago
fec_test.go rename typeFEC->typeParity 9 months ago
go.mod fixed modules 4 months ago
go.sum fixed modules 4 months ago
kcp.go len->cap 8 months ago
kcp_test.go lint 1 year ago
readloop_generic.go conditional build for linux and others 9 months ago
readloop_linux.go move batchSize to readloop_linux.go 9 months ago
sess.go move batchSize to readloop_linux.go 9 months ago
sess_test.go add WriteBuffers function to send a vector of slice in batch 9 months ago
snmp.go add InPkts & OutPkts counters 2 years ago
updater.go fix time comparsion on edge 9 months ago

Official site:

License GoDoc travis Go Report Card coveralls QQ群


you can use other programming languages besides Go to access rpcx services.

  • rpcx-gateway: You can write clients in any programming languages to call rpcx services via rpcx-gateway
  • http invoke: you can use the same http requests to access rpcx gateway
  • Java Services/Clients: You can use rpcx-java to implement/access rpcx servies via raw protocol.

If you can write Go methods, you can also write rpc services. It is so easy to write rpc applications with rpcx.


install the basic features:

go get -u -v

If you want to use reuseportquickcp, zookeeper, etcd, consul registry, use those tags to go getgo build or go run. For example, if you want to use all features, you can:

go get -u -v -tags "reuseport quic kcp zookeeper etcd consul ping rudp utp"


  • quic: support quic transport
  • kcp: support kcp transport
  • zookeeper: support zookeeper register
  • etcd: support etcd register
  • consul: support consul register
  • ping: support network quality load balancing
  • reuseport: support reuseport


rpcx is a RPC framework like Alibaba Dubbo and Weibo Motan.

rpcx 3.0 has been refactored for targets:

  1. Simple: easy to learn, easy to develop, easy to intergate and easy to deploy
  2. Performance: high perforamnce (>= grpc-go)
  3. Cross-platform: support raw slice of bytes, JSON, Protobuf and MessagePack. Theoretically it can be used with java, php, python, c/c++, node.js, c# and other platforms
  4. Service discovery and service governance: support zookeeper, etcd and consul.

It contains below features

  • Support raw Go functions. There’s no need to define proto files.
  • Pluggable. Features can be extended such as service discovery, tracing.
  • Support TCP, HTTP, QUIC and KCP
  • Support multiple codecs such as JSON, Protobuf, MessagePack and raw bytes.
  • Service discovery. Support peer2peer, configured peers, zookeeper, etcd, consul and mDNS.
  • Fault tolerance:Failover, Failfast, Failtry.
  • Load banlancing:support Random, RoundRobin, Consistent hashing, Weighted, network quality and Geography.
  • Support Compression.
  • Support passing metadata.
  • Support Authorization.
  • Support heartbeat and one-way request.
  • Other features: metrics, log, timeout, alias, circuit breaker.
  • Support bidirectional communication.
  • Support access via HTTP so you can write clients in any programming languages.
  • Support API gateway.
  • Support backup request, forking and broadcast.

rpcx uses a binary protocol and platform-independent, which means you can develop services in other languages such as Java, python, nodejs, and you can use other prorgramming languages to invoke services developed in Go.

There is a UI manager: rpcx-ui.


Test results show rpcx has better performance than other rpc framework except standard rpc lib.

The benchmark code is at rpcx-benchmark.

Listen to others, but test by yourself.

Test Environment

  • CPU: Intel® Xeon® CPU E5-2630 v3 @ 2.40GHz, 32 cores
  • Memory: 32G
  • Go: 1.9.0
  • OS: CentOS 7 / 3.10.0-229.el7.x86_64


  • protobuf
  • the client and the server on the same server
  • 581 bytes payload
  • 500/2000/5000 concurrent clients
  • mock processing time: 0ms, 10ms and 30ms

Test Result

mock 0ms process time

ThroughputsMean LatencyP99 Latency

mock 10ms process time

ThroughputsMean LatencyP99 Latency

mock 30ms process time

ThroughputsMean LatencyP99 Latency


You can find all examples at rpcx-ecosystem/rpcx-examples3.

The below is a simple example.


    // define example.Arith

    s := server.NewServer()
	s.RegisterName("Arith", new(example.Arith), "")
	s.Serve("tcp", addr)


    // prepare requests

    d := client.NewPeer2PeerDiscovery("tcp@"+addr, "")
	xclient := client.NewXClient("Arith", client.Failtry, client.RandomSelect, d, client.DefaultOption)
	defer xclient.Close()
	err := xclient.Call(context.Background(), "Mul", args, reply, nil)


see contributors.

Welcome to contribute:

  • submit issues or requirements
  • send PRs
  • write projects to use rpcx
  • write tutorials or articles to introduce rpcx


Apache License, Version 2.0