使用golang来使用gRPC
gRPC是Google开发的RPC框架,它基于序列化和协议的Protocol buffer。
示例实现
这是一个只需回复”pong”的服务器,当客户端发送”ping”时。详情请参考GitHub链接:https://github.com/juntaki/grpc-sample
原型
用proto3语法创建一个原型。在原型中,大致写下如下内容。
書式意味message構造体の形式service関数宣言packageパッケージ名
请参考此链接以获取更多详细信息:https://developers.google.com/protocol-buffers/docs/proto3
从proto文件生成代码时,请确保在这个README中的protoc命令后加上–go_out=plugins=grpc:。否则,service将不被定义。
https://github.com/golang/protobuf
protoc --go_out=plugins=grpc:. *.proto
服务器端的实现
双向流媒体即可在客户端处通过接收等待实现,并且所发送的信息与普通的流媒体没有区别,可以将其定义为由消息结构组成的数组。
-
- SimpleRPC
-
- Server-side streaming RPC
-
- Client-side streaming RPC
- Bidirectional streaming RPC
客户端的实施
根据服务器端的RPC类型,实现方法有很多种,但基本上只需使用grpc.Dial连接后,从NewXXXClient返回的结构体中利用原型实现的接口即可。
错误处理
undefined: grpc.SupportPackageIsVersion3
根据常见问题(FAQ)中所述,您只需升级软件包版本即可解决此问题。
https://github.com/grpc/grpc-go#faq
# command-line-arguments
server/server.go:34: cannot use pingpongServer literal (type *pingpongServer) as type pingpong.PingpongServer in argument to pingpong.RegisterPingpongServer:
*pingpongServer does not implement pingpong.PingpongServer (wrong type for Ping method)
have Ping("context".Context, *pingpong.PingRequest) (*pingpong.PingResponse, error)
want Ping("golang.org/x/net/context".Context, *pingpong.PingRequest) (*pingpong.PingResponse, error)
只需将“import”golang.org/x/net/context””放置即可。