diff --git a/cmd/connect/run.sh b/cmd/connect/run.sh index 06d1ddd..5298974 100755 --- a/cmd/connect/run.sh +++ b/cmd/connect/run.sh @@ -1,3 +1,3 @@ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go echo "打包完成" -docker run -v $(pwd)/:/app -p 8000:8000 -p 8002:8002 -p 8003:8003 alpine .//app/main +docker run -v $(pwd)/:/app -p 8000:8000 -p 8001:8001 -p 8002:8002 alpine .//app/main diff --git a/go.mod b/go.mod index 9464f5f..00d6c63 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module gim go 1.17 require ( - github.com/alberliu/gn v1.10.0 + github.com/alberliu/gn v1.13.0 github.com/gin-gonic/gin v1.7.7 github.com/go-redis/redis v6.15.9+incompatible github.com/go-sql-driver/mysql v1.6.0 diff --git a/go.sum b/go.sum index 7b31875..34b096b 100644 --- a/go.sum +++ b/go.sum @@ -62,8 +62,8 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/alberliu/gn v1.10.0 h1:BQcfgp1c8wc+AXvutImeJ5RAr7Lh/tc23vELJ3dgh10= -github.com/alberliu/gn v1.10.0/go.mod h1:Rm7O35H784ZsqxJr/3VcNgyHHfI7jf7GFTQ+o/fXAsg= +github.com/alberliu/gn v1.13.0 h1:Js+pLiMbOskmGEmMjRz9+K1Zd8Nr+B4C33WpyNFodMo= +github.com/alberliu/gn v1.13.0/go.mod h1:Rm7O35H784ZsqxJr/3VcNgyHHfI7jf7GFTQ+o/fXAsg= github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= diff --git a/internal/connect/conn.go b/internal/connect/conn.go index 4da8b89..a31457f 100644 --- a/internal/connect/conn.go +++ b/internal/connect/conn.go @@ -101,7 +101,7 @@ func (c *Conn) HandleMessage(bytes []byte) { var input = new(pb.Input) err := proto.Unmarshal(bytes, input) if err != nil { - logger.Logger.Error("unmarshal error", zap.Error(err)) + logger.Logger.Error("unmarshal error", zap.Error(err), zap.Int("len", len(bytes))) return } logger.Logger.Debug("HandleMessage", zap.Any("input", input)) diff --git a/internal/connect/tcp_server.go b/internal/connect/tcp_server.go index 4512354..807389e 100644 --- a/internal/connect/tcp_server.go +++ b/internal/connect/tcp_server.go @@ -7,6 +7,8 @@ import ( "gim/pkg/rpc" "time" + "github.com/alberliu/gn/codec" + "go.uber.org/zap" "github.com/alberliu/gn" @@ -20,8 +22,8 @@ func StartTCPServer(addr string) { var err error server, err = gn.NewServer(addr, &handler{}, - gn.WithDecoder(gn.NewHeaderLenDecoder(2)), - gn.WithEncoder(gn.NewHeaderLenEncoder(2, 1024)), + gn.WithDecoder(codec.NewUvarintDecoder()), + gn.WithEncoder(codec.NewUvarintEncoder(1024)), gn.WithReadBufferLen(256), gn.WithTimeout(11*time.Minute), gn.WithAcceptGNum(10), diff --git a/internal/logic/api/logic_ext_test.go b/internal/logic/api/logic_ext_test.go index d357646..3aceefb 100644 --- a/internal/logic/api/logic_ext_test.go +++ b/internal/logic/api/logic_ext_test.go @@ -9,6 +9,8 @@ import ( "testing" "time" + "google.golang.org/protobuf/types/known/emptypb" + "google.golang.org/grpc" "google.golang.org/grpc/metadata" ) @@ -51,7 +53,7 @@ func TestLogicExtServer_SendMessageToFriend(t *testing.T) { resp, err := getLogicExtClient().SendMessageToFriend(getCtx(), &pb.SendMessageReq{ ReceiverId: 2, - Content: []byte("hahaha"), + Content: []byte("hahaha1000"), SendTime: util.UnixMilliTime(time.Now()), }) if err != nil { @@ -103,7 +105,7 @@ func TestLogicExtServer_GetGroup(t *testing.T) { } func TestLogicExtServer_GetUserGroups(t *testing.T) { - resp, err := getLogicExtClient().GetGroups(getCtx(), &pb.Empty{}) + resp, err := getLogicExtClient().GetGroups(getCtx(), &emptypb.Empty{}) if err != nil { fmt.Println(err) return diff --git a/test/tcp_conn/main.go b/test/tcp_conn/main.go index 68dd509..dfb5554 100644 --- a/test/tcp_conn/main.go +++ b/test/tcp_conn/main.go @@ -8,12 +8,15 @@ import ( "net" "time" - gim_util "github.com/alberliu/gn/util" + "github.com/alberliu/gn/codec" jsoniter "github.com/json-iterator/go" "google.golang.org/protobuf/proto" ) -var codecFactory = gim_util.NewHeaderLenCodecFactory(2, 65536) +var ( + decoder = codec.NewUvarintDecoder() + encoder = codec.NewUvarintEncoder(1024) +) func main() { log.SetFlags(log.Lshortfile | log.LstdFlags) @@ -30,11 +33,11 @@ func Json(i interface{}) string { } type TcpClient struct { - UserId int64 - DeviceId int64 - Seq int64 - codec *gim_util.Codec - Conn net.Conn + UserId int64 + DeviceId int64 + Seq int64 + Conn net.Conn + ReadBuffer *codec.Buffer } func (c *TcpClient) Output(pt pb.PackageType, requestId int64, message proto.Message) { @@ -58,7 +61,7 @@ func (c *TcpClient) Output(pt pb.PackageType, requestId int64, message proto.Mes return } - _, err = c.Conn.Write(gim_util.Encode(inputByf)) + err = encoder.EncodeToWriter(c.Conn, inputByf) if err != nil { log.Println(err) } @@ -71,8 +74,8 @@ func (c *TcpClient) Start() { return } - c.codec = codecFactory.NewCodec(connect) c.Conn = connect + c.ReadBuffer = codec.NewBuffer(make([]byte, 65536)) c.SignIn() c.SyncTrigger() @@ -92,6 +95,7 @@ func (c *TcpClient) SignIn() { func (c *TcpClient) SyncTrigger() { c.Output(pb.PackageType_PT_SYNC, time.Now().UnixNano(), &pb.SyncInput{Seq: c.Seq}) + log.Println("开始同步") } func (c *TcpClient) Heartbeat() { @@ -103,13 +107,17 @@ func (c *TcpClient) Heartbeat() { func (c *TcpClient) Receive() { for { - bytes, err := c.codec.Read() + _, err := c.ReadBuffer.ReadFromReader(c.Conn) if err != nil { log.Println(err) return } - c.HandlePackage(bytes) + err = decoder.Decode(c.ReadBuffer, c.HandlePackage) + if err != nil { + log.Println(err) + return + } } }