乐趣区

关于golang:golang-grpc实现加法计算

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

代码构造

退出移动版