From 3b95f603fbf47e31eef0d86566cb70aa5a2dfa49 Mon Sep 17 00:00:00 2001 From: gsw945 Date: Fri, 2 Jul 2021 13:41:53 +0800 Subject: [PATCH] adopt the newly protobuf package and fix some docs type --- .travis.yml | 5 +++++ README.md | 11 ++++++++--- benchmark/io/io_test.go | 21 ++++++++++++++++----- cluster/node_test.go | 24 +++++++++++++++--------- docs/get_started.md | 15 +++++++++++---- docs/get_started_zh_CN.md | 15 +++++++++++---- docs/route_compression_zh_CN.md | 2 +- go.mod | 1 + go.sum | 2 ++ internal/message/message.go | 4 ++-- serialize/protobuf/protobuf_test.go | 6 +++--- 11 files changed, 75 insertions(+), 31 deletions(-) diff --git a/.travis.yml b/.travis.yml index f7589c17..8f742cca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,11 @@ go: - 1.9.x - 1.10.x - 1.11.x + - 1.12.x + - 1.13.x + - 1.14.x + - 1.15.x + - 1.16.x script: - go test -v ./... diff --git a/README.md b/README.md index 791b15fa..29634010 100644 --- a/README.md +++ b/README.md @@ -121,8 +121,14 @@ go get -u google.golang.org/grpc # download form: https://github.com/protocolbuffers/protobuf/releases # protoc-gen-go go install google.golang.org/protobuf/cmd/protoc-gen-go@latest -go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest +# delve +go install github.com/go-delve/delve/cmd/dlv@latest +``` + +## Test +```bash +go test -v ./... ``` ## Benchmark @@ -133,9 +139,8 @@ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest # Device: i5-6500 3.2GHz 4 Core/1000-Concurrent   => IOPS 11W(Average) # Other: ... -cd $GOPATH/src/github.com/lonng/nano/benchmark/io +cd ./benchmark/io go test -v -tags "benchmark" -go test -tags "benchmark" -v benchmark\io\io_test.go ``` ## License diff --git a/benchmark/io/io_test.go b/benchmark/io/io_test.go index a8c16b98..45d67ab2 100644 --- a/benchmark/io/io_test.go +++ b/benchmark/io/io_test.go @@ -27,6 +27,7 @@ const ( type TestHandler struct { component.Base metrics int32 + group *nano.Group } func (h *TestHandler) AfterInit() { @@ -41,16 +42,26 @@ func (h *TestHandler) AfterInit() { }() } +func NewTestHandler() *TestHandler { + return &TestHandler{ + group: nano.NewGroup("handler"), + } +} + func (h *TestHandler) Ping(s *session.Session, data *testdata.Ping) error { atomic.AddInt32(&h.metrics, 1) return s.Push("pong", &testdata.Pong{Content: data.Content}) } func server() { - nano.Register(&TestHandler{}) - nano.SetSerializer(protobuf.NewSerializer()) - - nano.Listen(addr) + components := &component.Components{} + components.Register(NewTestHandler()) + + nano.Listen(addr, + nano.WithDebugMode(), + nano.WithSerializer(protobuf.NewSerializer()), + nano.WithComponents(components), + ) } func client() { @@ -68,7 +79,7 @@ func client() { c.On("pong", func(data interface{}) {}) <-chReady - for { + for /*i := 0; i < 1; i++*/ { c.Notify("TestHandler.Ping", &testdata.Ping{}) time.Sleep(10 * time.Millisecond) } diff --git a/cluster/node_test.go b/cluster/node_test.go index 2b0d7d11..4f38917a 100644 --- a/cluster/node_test.go +++ b/cluster/node_test.go @@ -54,9 +54,11 @@ func (s *nodeSuite) TestNodeStartup(c *C) { masterComps := &component.Components{} masterComps.Register(&MasterComponent{}) masterNode := &cluster.Node{ - IsMaster: true, + Options: cluster.Options{ + IsMaster: true, + Components: masterComps, + }, ServiceAddr: "127.0.0.1:4450", - Components: masterComps, } err := masterNode.Startup() c.Assert(err, IsNil) @@ -66,10 +68,12 @@ func (s *nodeSuite) TestNodeStartup(c *C) { member1Comps := &component.Components{} member1Comps.Register(&GateComponent{}) memberNode1 := &cluster.Node{ - AdvertiseAddr: "127.0.0.1:4450", - ServiceAddr: "127.0.0.1:14451", - ClientAddr: "127.0.0.1:14452", - Components: member1Comps, + Options: cluster.Options{ + AdvertiseAddr: "127.0.0.1:4450", + ClientAddr: "127.0.0.1:14452", + Components: member1Comps, + }, + ServiceAddr: "127.0.0.1:14451", } err = memberNode1.Startup() c.Assert(err, IsNil) @@ -82,9 +86,11 @@ func (s *nodeSuite) TestNodeStartup(c *C) { member2Comps := &component.Components{} member2Comps.Register(&GameComponent{}) memberNode2 := &cluster.Node{ - AdvertiseAddr: "127.0.0.1:4450", - ServiceAddr: "127.0.0.1:24451", - Components: member2Comps, + Options: cluster.Options{ + AdvertiseAddr: "127.0.0.1:4450", + Components: member2Comps, + }, + ServiceAddr: "127.0.0.1:24451", } err = memberNode2.Startup() c.Assert(err, IsNil) diff --git a/docs/get_started.md b/docs/get_started.md index 8b037a0b..70b419a0 100644 --- a/docs/get_started.md +++ b/docs/get_started.md @@ -176,15 +176,22 @@ func (r *Room) Message(s *session.Session, msg *UserMessage) error { } func main() { - nano.Register(NewRoom()) - nano.SetSerializer(json.NewSerializer()) - nano.EnableDebug() + components := &component.Components{} + components.Register(NewRoom()) + log.SetFlags(log.LstdFlags | log.Llongfile) http.Handle("/web/", http.StripPrefix("/web/", http.FileServer(http.Dir("web")))) nano.SetCheckOriginFunc(func(_ *http.Request) bool { return true }) - nano.Listen(":3250", nano.WithIsWebsocket(true)) + nano.Listen(":3250", + nano.WithIsWebsocket(true), + nano.WithCheckOriginFunc(func(_ *http.Request) bool { return true }), + nano.WithWSPath("/ws"), + nano.WithDebugMode(), + nano.WithSerializer(json.NewSerializer()), // override default serializer + nano.WithComponents(components), + ) } ``` diff --git a/docs/get_started_zh_CN.md b/docs/get_started_zh_CN.md index 5b898a3e..bff53ccb 100644 --- a/docs/get_started_zh_CN.md +++ b/docs/get_started_zh_CN.md @@ -165,15 +165,22 @@ func (r *Room) Message(s *session.Session, msg *UserMessage) error { } func main() { - nano.Register(NewRoom()) - nano.SetSerializer(json.NewSerializer()) - nano.EnableDebug() + components := &component.Components{} + components.Register(NewRoom()) + log.SetFlags(log.LstdFlags | log.Llongfile) http.Handle("/web/", http.StripPrefix("/web/", http.FileServer(http.Dir("web")))) nano.SetCheckOriginFunc(func(_ *http.Request) bool { return true }) - nano.Listen(":3250", nano.WithIsWebsocket(true)) + nano.Listen(":3250", + nano.WithIsWebsocket(true), + nano.WithCheckOriginFunc(func(_ *http.Request) bool { return true }), + nano.WithWSPath("/ws"), + nano.WithDebugMode(), + nano.WithSerializer(json.NewSerializer()), // override default serializer + nano.WithComponents(components), + ) } ``` diff --git a/docs/route_compression_zh_CN.md b/docs/route_compression_zh_CN.md index dea8eb76..7f01f399 100644 --- a/docs/route_compression_zh_CN.md +++ b/docs/route_compression_zh_CN.md @@ -43,7 +43,7 @@ nano.request('Room.Join', 也就是说不再以字符串作为通信格式了,直接发送有效的二进制数据将会更好地减少额外开销,`nano`可以使用Protobuf 作为二进制协议, 可以通过: ```go -nano.SetSerializer(protobuf.NewSerializer()) +nano.WithSerializer(protobuf.NewSerializer()) ``` 让nano选择Protobuf作为二进制协议 diff --git a/go.mod b/go.mod index 3a1abba5..311cf128 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.12 require ( github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect + github.com/google/uuid v1.2.0 // indirect github.com/gorilla/websocket v1.4.2 // indirect github.com/pingcap/check v0.0.0-20200212061837-5e12011dc712 // indirect github.com/pingcap/errors v0.11.4 // indirect diff --git a/go.sum b/go.sum index 7707db0e..074497b1 100644 --- a/go.sum +++ b/go.sum @@ -46,6 +46,8 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= diff --git a/internal/message/message.go b/internal/message/message.go index 46632d7d..dc0295c9 100644 --- a/internal/message/message.go +++ b/internal/message/message.go @@ -209,7 +209,7 @@ func Decode(data []byte) (*Message, error) { m.compressed = false rl := data[offset] offset++ - if offset+int(rl) >= len(data) { + if offset+int(rl) > len(data) { return nil, ErrWrongMessage } m.Route = string(data[offset:(offset + int(rl))]) @@ -217,7 +217,7 @@ func Decode(data []byte) (*Message, error) { } } - if offset >= len(data) { + if offset > len(data) { return nil, ErrWrongMessage } m.Data = data[offset:] diff --git a/serialize/protobuf/protobuf_test.go b/serialize/protobuf/protobuf_test.go index 9bb42379..b3ddbf2f 100644 --- a/serialize/protobuf/protobuf_test.go +++ b/serialize/protobuf/protobuf_test.go @@ -1,7 +1,7 @@ package protobuf import ( - "reflect" + "google.golang.org/protobuf/proto" "testing" "github.com/lonng/nano/benchmark/testdata" @@ -20,8 +20,8 @@ func TestProtobufSerialezer_Serialize(t *testing.T) { if err := s.Unmarshal(b, m1); err != nil { t.Fatalf("unmarshal failed: %v", err) } - - if !reflect.DeepEqual(m, m1) { + // refer: https://developers.google.com/protocol-buffers/docs/reference/go/faq#deepequal + if !proto.Equal(m, m1) { t.Fail() } }