From c17d0fcc0f5d4f06b953f42202b2818dc692303c Mon Sep 17 00:00:00 2001 From: Asim Aslam Date: Sun, 13 Jan 2019 19:54:07 +0000 Subject: [PATCH] grpc request --- client/rpc_codec.go | 4 ++++ codec/grpc/grpc.go | 23 ++++++++++++++++++----- server/rpc_server.go | 4 ++-- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/client/rpc_codec.go b/client/rpc_codec.go index 647d044b..a7e9dada 100644 --- a/client/rpc_codec.go +++ b/client/rpc_codec.go @@ -6,6 +6,7 @@ import ( "github.com/micro/go-micro/codec" raw "github.com/micro/go-micro/codec/bytes" + "github.com/micro/go-micro/codec/grpc" "github.com/micro/go-micro/codec/json" "github.com/micro/go-micro/codec/jsonrpc" "github.com/micro/go-micro/codec/proto" @@ -48,6 +49,9 @@ var ( DefaultContentType = "application/protobuf" DefaultCodecs = map[string]codec.NewCodec{ + "application/grpc": grpc.NewCodec, + "application/grpc+json": grpc.NewCodec, + "application/grpc+proto": grpc.NewCodec, "application/protobuf": proto.NewCodec, "application/json": json.NewCodec, "application/json-rpc": jsonrpc.NewCodec, diff --git a/codec/grpc/grpc.go b/codec/grpc/grpc.go index 79c30f4b..732f0356 100644 --- a/codec/grpc/grpc.go +++ b/codec/grpc/grpc.go @@ -4,6 +4,7 @@ package grpc import ( "encoding/json" "errors" + "fmt" "io" "strings" @@ -77,8 +78,23 @@ func (c *Codec) Write(m *codec.Message, b interface{}) error { c.ContentType = ct } - m.Header["Trailer"] = "grpc-status, grpc-message" + switch m.Type { + case codec.Request: + parts := strings.Split(m.Endpoint, ".") + m.Header[":method"] = "POST" + m.Header[":path"] = fmt.Sprintf("/%s.%s/%s", m.Target, parts[0], parts[1]) + m.Header[":proto"] = "HTTP/2.0" + m.Header["te"] = "trailers" + m.Header["user-agent"] = "grpc-go/1.0.0" + m.Header[":authority"] = m.Target + m.Header["content-type"] = c.ContentType + case codec.Response: + m.Header["Trailer"] = "grpc-status, grpc-message" + m.Header["grpc-status"] = "0" + m.Header["grpc-message"] = "" + } + // marshal content switch c.ContentType { case "application/grpc+json": buf, err = json.Marshal(b) @@ -90,16 +106,13 @@ func (c *Codec) Write(m *codec.Message, b interface{}) error { default: err = errors.New("Unsupported Content-Type") } - + // check error if err != nil { m.Header["grpc-status"] = "8" m.Header["grpc-message"] = err.Error() return err } - m.Header["grpc-status"] = "0" - m.Header["grpc-message"] = "" - return encode(0, buf, c.Conn) } diff --git a/server/rpc_server.go b/server/rpc_server.go index 93b49d4d..d02e8421 100644 --- a/server/rpc_server.go +++ b/server/rpc_server.go @@ -153,8 +153,8 @@ func (s *rpcServer) ServeConn(sock transport.Socket) { // write an error response rcodec.Write(&codec.Message{ Header: msg.Header, - Error: err.Error(), - Type: codec.Error, + Error: err.Error(), + Type: codec.Error, }, nil) s.wg.Done()