美文网首页go
grpc基本使用

grpc基本使用

作者: lesterhnu | 来源:发表于2021-03-23 23:54 被阅读0次

前言

grpc 是一种基于 HTTP/2 设计的RPC框架,采用protobuf作为idl (交互式数据语言Interactive Data Language) 本篇简单介绍下grpc的使用,并制作一个demo

一、安装protoc

$ go get -u github.com/golang/protobuf
$ go get -u github.com/golang/protobuf/protoc-gen-go
  • 确保protoc protoc-gen-go安装成功,可到$GOPATH/bin/ 目录下查看

二、项目创建

1.创建目录结构

hello
├── client
│ └── client.go
└── server
└── server.go
└── proto
└── hello.proto
└── hello.pb.go # 通过protoc命令生成
├── go.mod

编写proto文件
// hello.proto
syntax = "proto3";
service HelloService {
    rpc SayHello(SayHelloRequest)returns(SayHelloResponse){}
}
message SayHelloRequest{
    string name = 1;
}
message SayHelloResponse {
    string msg = 1;
}
生成pb文件  proto/hello.pb.go
$ protoc --go_out=plugins=grpc:./ ./proto/hello.proto

2 编写服务端代码

// server/server.go
package main

import (
    "context"
    "fmt"
    "google.golang.org/grpc"
    hello "hello/proto"
    "log"
    "net"
)

type HelloServer struct {
}

func (h *HelloServer) SayHello(ctx context.Context, request *hello.SayHelloRequest) (*hello.SayHelloResponse, error) {
    name := request.Name
    fmt.Printf("receive name : %s", name)
    msg := fmt.Sprintf("hello, %s", name)
    return &hello.SayHelloResponse{Msg: msg}, nil
}
func main() {
    server  := grpc.NewServer() // 创建gRPC Server 对象
    // 将HelloService 注册到gRPC Server 的内部注册中心;接收到请求时,通过内部的服务发现,发现该服务的端口并转接进行逻辑处理
    hello.RegisterHelloServiceServer(server,&HelloServer{})
    // 创建listen,监听tcp端口
    lis, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Fatalf("failed to listen:%+v", err)
    }
    if err := server .Serve(lis); err != nil {
        log.Fatalf("err %+v", err)
    }
}

3 编写客户端代码

// client/client.go
package main

import (
    "context"
    "google.golang.org/grpc"
    hello "hello/proto"
    "log"
)

const (
    Address = "127.0.0.1:8080"
)

func main() {
    conn, err := grpc.Dial(Address, grpc.WithInsecure())
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    client := hello.NewHelloServiceClient(conn)
    ctx := context.Background()
    request := &hello.SayHelloRequest{Name: "lester"}
    response, err := client.SayHello(ctx, request)
    if err != nil {
        log.Fatalf("get response err :%v", err)
    }
    log.Printf("receive response msg:%s", response.Msg)
}

  • 根目录下运行
go run server/server.go
  • 另起一个终端运行
go run client/client.go

客户端输出结果


image.png

相关文章

  • grpc基本使用

    前言 grpc 是一种基于 HTTP/2 设计的RPC框架,采用protobuf作为idl (交互式数据语言Int...

  • Fabric源码基础-grpc的使用03

    Fabric的节点通过grpc向内部或外部提供接口,在学习源码之前,需要对grpc的基本使用有所了解,并了解如何在...

  • Fabric源码基础-grpc的使用01

    Fabric的节点通过grpc向内部或外部提供接口,在学习源码之前,需要对grpc的基本使用有所了解,并了解如何在...

  • Fabric源码基础-grpc的使用02

    Fabric的节点通过grpc向内部或外部提供接口,在学习源码之前,需要对grpc的基本使用有所了解,并了解如何在...

  • grpc初探

    1 grpc的定义 grpc good rpc grpc使用protobuf文件声明服务,服务端和客户端都通使用...

  • google grpc 快速入门

    为什么去使用gRPC 使用gRPC,我们可以在.proto文件中定义我们的服务,并以任何gRPC支持的语言实现客户...

  • 什么是RPC?

    1. 基本的RPC模型 主要介绍RPC是什么,基本的RPC代码,RPC与REST的区别,gRPC的使用 1.1 基...

  • gRPC 学习笔记

     gRPC 学习笔记,记录gprc一些基本概念.  gRPC正如其他 RPC 系统,gRPC 基于如下思想:定义一...

  • Hyperledger-Fabric-SDK-设计

    概要 区块链网络使用 gRPC 协议 Protocol Buffers(格式的 API) 使用的协议 gRPC P...

  • grpc和consul结合实现分布式rpc调用

    # GRPC > 主要介绍了grpc在使用示例和原理,以及如何与consul结合 ## gRPC 是什么? > g...

网友评论

    本文标题:grpc基本使用

    本文链接:https://www.haomeiwen.com/subject/mwtchltx.html