golang,grpc入门,远程计算两个数求和

先写proto文件

syntax="proto3";
package grpc_demo;

message Request {
    int64 a = 1;
    int64 b = 2;
}

message Response {
    int64 result = 1;
}

service AddService {
    rpc Add(Request) returns (Response);
}

然后生产pb.go

protoc --go_out=plugins=grpc:. grpc_demo.proto

写server.go

package main
import (
    "grpc_demo"//引入grpc_demo模块
    "google.golang.org/grpc"
    "net"
    "context"
)    

type DemoService struct{}

func (DemoService) Add(ctx context.Context, request *grpc_demo.Request) (rsp *grpc_demo.Response, err error) {
    a, b := request.A, request.B
    result := a + b
    return &grpc_demo.Response{Result: result}, err
}

func main() {
    conn, err := net.Listen("tcp", ":8089")
    if err != nil {
        panic(err)
    }

    srv := grpc.NewServer()
    grpc_demo.RegisterAddServiceServer(srv, &DemoService{})
    if err := srv.Serve(conn); err != nil {
        panic(err)
    }
}

写client.go

package main
import (
    "grpc_demo"
    "google.golang.org/grpc"
    "context"
    "fmt"    
)

func main() {
    conn, err := grpc.Dial("127.0.0.1:8089", grpc.WithInsecure())
    if err != nil {
        panic(err)
    }

    defer conn.Close()
    addServiceClient := grpc_demo.NewAddServiceClient(conn)
    response, err := addServiceClient.Add(context.Background(), &grpc_demo.Request{A:1, B:2})
    if err != nil {
        panic(err)
    }
    fmt.Println(response.Result)
}

然后分别运行就可以了

你可能感兴趣的:(grpc,golang)