- Notifications
You must be signed in to change notification settings - Fork2
Package rpc implements a remote procedure call over TCP, UNIX, HTTP and WS. Up to 4x faster than net/rpc.
License
NotificationsYou must be signed in to change notification settings
hslam/rpc
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Package rpc implements a remote procedure call over TCP, UNIX, HTTP and WS. The rpc improves throughput and reduces latency. Up to 4 times faster than net/rpc.
- More throughput and less latency.
- Netpoll epoll/kqueue/net
- Network tcp/unix/http/ws
- Codec json/code/pb
- Multiplexing/Pipelining
- Auto batching
- Call/Go/RoundTrip/Ping/Stream/CallWithContext
- Conn/Transport/Client
- TLS
Comparison to other packages
Package | netrpc | jsonrpc | rpc | grpc | rpcx |
---|---|---|---|---|---|
Epoll/Kqueue | No | No | Yes | No | No |
Multiplexing | Yes | Yes | Yes | Yes | Yes |
Pipelining | No | No | Yes | No | No |
Auto Batching | No | No | Yes | No | No |
Transport | No | No | Yes | No | No |
go get github.com/hslam/rpc
import "github.com/hslam/rpc"
arith.proto
syntax = "proto3";package service;message ArithRequest { int32 a = 1; int32 b = 2;}message ArithResponse { int32 pro = 1;}
protoc ./arith.proto --gogofaster_out=./
arith.go
package servicetypeArithstruct{}func (a*Arith)Multiply(req*ArithRequest,res*ArithResponse)error {res.Pro=req.A*req.Breturnnil}
server.go
package mainimport ("github.com/hslam/rpc""github.com/hslam/rpc/examples/codec/pb/service")funcmain() {rpc.Register(new(service.Arith))rpc.Listen("tcp",":9999","pb")}
conn.go
package mainimport ("fmt""github.com/hslam/rpc""github.com/hslam/rpc/examples/codec/pb/service")funcmain() {conn,err:=rpc.Dial("tcp",":9999","pb")iferr!=nil {panic(err)}deferconn.Close()req:=&service.ArithRequest{A:9,B:2}varres service.ArithResponseiferr=conn.Call("Arith.Multiply",req,&res);err!=nil {panic(err)}fmt.Printf("%d * %d = %d\n",req.A,req.B,res.Pro)}
transport.go
package mainimport ("fmt""github.com/hslam/rpc""github.com/hslam/rpc/examples/codec/pb/service")funcmain() {trans:=&rpc.Transport{MaxConnsPerHost:1,MaxIdleConnsPerHost:1,Options:&rpc.Options{Network:"tcp",Codec:"pb"},}defertrans.Close()req:=&service.ArithRequest{A:9,B:2}varres service.ArithResponseiferr:=trans.Call(":9999","Arith.Multiply",req,&res);err!=nil {panic(err)}fmt.Printf("%d * %d = %d\n",req.A,req.B,res.Pro)}
client.go
package mainimport ("fmt""github.com/hslam/rpc""github.com/hslam/rpc/examples/codec/pb/service")funcmain() {opts:=&rpc.Options{Network:"tcp",Codec:"pb"}client:=rpc.NewClient(opts,":9997",":9998",":9999")client.Scheduling=rpc.LeastTimeSchedulingdeferclient.Close()req:=&service.ArithRequest{A:9,B:2}varres service.ArithResponseiferr:=client.Call("Arith.Multiply",req,&res);err!=nil {panic(err)}fmt.Printf("%d * %d = %d\n",req.A,req.B,res.Pro)}
context.go
package mainimport ("context""fmt""github.com/hslam/rpc""github.com/hslam/rpc/examples/codec/pb/service""time")funcmain() {conn,err:=rpc.Dial("tcp",":9999","pb")iferr!=nil {panic(err)}deferconn.Close()req:=&service.ArithRequest{A:9,B:2}varres service.ArithResponseemptyCtx:=context.Background()valueCtx:=context.WithValue(emptyCtx,rpc.BufferContextKey,make([]byte,64))ctx,cancel:=context.WithTimeout(valueCtx,time.Minute)defercancel()err=conn.CallWithContext(ctx,"Arith.Multiply",req,&res)iferr!=nil {panic(err)}fmt.Printf("%d * %d = %d\n",req.A,req.B,res.Pro)}
9 * 2 = 18
This package is licensed under a MIT license (Copyright (c) 2019 Meng Huang)
rpc was written by Meng Huang.
About
Package rpc implements a remote procedure call over TCP, UNIX, HTTP and WS. Up to 4x faster than net/rpc.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
No packages published
Uh oh!
There was an error while loading.Please reload this page.