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
代码结构
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。