Categorygithub.com/ndsky1003/crpc
modulepackage
1.0.14
Repository: https://github.com/ndsky1003/crpc.git
Documentation: pkg.go.dev

# README

crpc

中心服务的rpc,采用注册机制

数据类型支持

  1. coder.JSON

number,string,bool,slice, map *point 测试通过

  1. coder.MsgPack

number,string,bool,slice, map *point 测试通过

  1. coder.Msgp

当没有代码自动生成的时候(尚未实现其协议的)=>自动使用2.coder.MsgPack序列化

这里就需要注意其兼容性了,struct,只有*struct才是实现了其协议的,否则均会降级使用2.coder.MscPack mark: struct 使用2序列化.将字节码又通过3来反解就会有些不兼容

number,string,bool,slice, map *point 测试通过 map只支持string作为key

自定义解码器的时候优先要测试需要支持的类型

数据压缩

Raw,Snappy 测试通过

usage

server.go

	crpc.NewServer().Listen(":8080")

client1.go

client1 := crpc.Dial("client1", "127.0.0.1:8080", options.Client().SetIsStopHeart(true))
time.Sleep(2e9)                          //保证其链接上,正式使用,不需要
client1.RegisterName("rpc", new(Person)) //注册服务
fmt.Println("start")
var s []*Data
//number,string,bool,slice, map *point
if err := client1.Call("client1", "rpc.GetName", map[string]*Data{"0": {Name: "dd", Age: 18}, "3": {Name: "dd1", Age: 80}}, &s); err != nil {
  fmt.Println(err)
}
time.Sleep(1e9)
fmt.Printf("done:result:%+v", s)

client2.go

client2 := crpc.Dial("client2", "127.0.0.1:8080", options.Client().SetIsStopHeart(true))
time.Sleep(2e9)                          //保证其链接上,正式使用,不需要
var s []*Data
if err := client2.Call("client1", "rpc.GetName", map[string]*Data{"0": {Name: "dd", Age: 18}, "3": {Name: "dd1", Age: 80}}, &s); err != nil {
  fmt.Println(err)
}
time.Sleep(1e9)
fmt.Printf("done:result:%+v", s)

文件发送

维护好chunksize就可以支持断点续传 client1.go

	client := crpc.Dial("client", "127.0.0.1:8080", options.Client().SetIsStopHeart(true).SetChunksMaxSize(50*1024*1024))
	time.Sleep(1e9)
	f, err := os.Open("ccc/鲸落.mp4")
	if err != nil {
		panic(err)
	}
	defer f.Close()
	if err := client.SendFile("client1", "rpc.SaveFile", "img/鲸落.mp4", f); err != nil {
		logrus.Error(err)
	}
	logrus.Info("done")

client2.go

func main() {
	client1 := crpc.Dial("client1", "127.0.0.1:8080", options.Client().SetIsStopHeart(true))
	client1.RegisterName("rpc", new(o))
	time.Sleep(1e9)
	select {}
}
type o struct {
}
func (*o) SaveFile(req dto.FileBody, _ *int) error {
	f, err := comm.GetWriteFile(req.ChunksIndex, req.Filename)
	if err != nil {
		return err
	}
	defer f.Close()
	_, err = f.Write(req.Data)
	if err != nil {
		return err
	}
	return nil
}

Benchmark

➜  crpc git:(main) ✗ go test -v -run ^$ -bench Call$ -benchmem
ERRO[0000]/Users/mac/go/workSpace/self-pkg/crpc/client.go:108 github.com/ndsky1003/crpc.(*Client).keepAlive() dail err:dial tcp 127.0.0.1:8081: connect: connection refused
INFO[0001]/Users/mac/go/workSpace/self-pkg/crpc/server.go:104 github.com/ndsky1003/crpc.(*server).addService() add service:client
goos: darwin
goarch: amd64
pkg: github.com/ndsky1003/crpc
cpu: 12th Gen Intel(R) Core(TM) i5-12400
Benchmark_Call
INFO[0002]/Users/mac/go/workSpace/self-pkg/crpc/server.go:104 github.com/ndsky1003/crpc.(*server).addService() add service:client2
Benchmark_Call/1
Benchmark_Call/1-12  	1000000000	         0.0001096 ns/op	       0 B/op	       0 allocs/op
Benchmark_Call/2
Benchmark_Call/2-12  	1000000000	         0.0001179 ns/op	       0 B/op	       0 allocs/op
Benchmark_Call/3
Benchmark_Call/3-12  	1000000000	         0.0000847 ns/op	       0 B/op	       0 allocs/op
Benchmark_Call/4
Benchmark_Call/4-12  	1000000000	         0.0000895 ns/op	       0 B/op	       0 allocs/op
Benchmark_Call/5
Benchmark_Call/5-12  	1000000000	         0.0000724 ns/op	       0 B/op	       0 allocs/op
Benchmark_Call/6
Benchmark_Call/6-12  	1000000000	         0.0000890 ns/op	       0 B/op	       0 allocs/op
PASS
ok  	github.com/ndsky1003/crpc	3.025s

# Packages

copy.
目前这个性能最好,不在乎其内部结构是否缺少 msgp 是msgpack的代码生成实现 vmihailenco/msgpack 是msgpack的非代码实现,这2个玩意儿是兼容的.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Functions

No description provided by the author
No description provided by the author

# Variables

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Structs

No description provided by the author
1.