共计 1374 个字符,预计需要花费 4 分钟才能阅读完成。
1.grpc 近程加法计算
proto 装置及 proto-gen 装置省略
2.proto 文件编写
syntax="proto3"; // 指定 proto3 格局 | |
package service; | |
option go_package="./;service"; //go 打包的 package | |
service Calculator{rpc Add(Numbers) returns (CalResult){} // 定义一个服务 参数为 Numbers 后果为 CalResult} | |
message Numbers{ // 申请参数 message,有 a 和 b | |
int64 a = 1; | |
int64 b = 2; | |
} | |
message CalResult{ // 响应后果 CalResult | |
int64 message = 1; | |
} |
生成 go 格式文件
protoc -I ./proto/ ./proto/calculator.proto –go_out=plugins=grpc:service
3. 服务端
package main | |
import ( | |
"context" | |
"fmt" | |
"grpcdemo/service" | |
"net" | |
"google.golang.org/grpc" | |
"google.golang.org/grpc/reflection" | |
) | |
type Server struct{} // 定义一个构造体实现 Add() 办法 | |
func (s *Server) Add(ctx context.Context, in *service.Numbers) (*service.CalResult, error){return &service.CalResult{Message: in.A + in.B},nil | |
} | |
func main(){lis,err := net.Listen("tcp",":8089") | |
if err != nil {fmt.Printf("监听端口失败:%s",err) | |
return | |
} | |
s := grpc.NewServer() | |
service.RegisterCalculatorServer(s,&Server{}) | |
reflection.Register(s) | |
err = s.Serve(lis) | |
if err != nil {fmt.Printf("开启服务失败:%s",err) | |
return | |
} | |
} | |
实现的办法为
4. 客户端调用
package main | |
import ( | |
"context" | |
"fmt" | |
"grpcdemo/service" | |
"google.golang.org/grpc" | |
) | |
func main() {conn, err := grpc.Dial(":8089",grpc.WithInsecure()) | |
if err != nil{fmt.Printf("连贯服务器失败:%s",err) | |
return | |
} | |
defer conn.Close() | |
c := service.NewCalculatorClient(conn) | |
r,err := c.Add(context.Background(),&service.Numbers{A:1,B:2}) // 指定调用申请参数 | |
if err != nil {fmt.Printf("调用服务端失败:%s",err) | |
return | |
} | |
fmt.Printf("调用胜利:%d \n",r.Message) | |
} |
5. 启动服务端和客户端
go run ./server/server.go | |
go run ./client/client.go |
代码构造
正文完