grpc入门(代码片段)

落雷 落雷     2023-04-17     739

关键词:

1. gRPC简介

gRPC是一种高性能、开源和通用的远程过程调用(RPC)框架,由Google开源并维护。它使用Protocol Buffers(protobuf)作为接口定义语言(IDL),提供跨平台、跨语言的RPC调用支持。gRPC具有以下几个特点:

  1. 高性能:使用HTTP/2协议,支持多路复用和流控制等特性,能够在客户端和服务器之间高效地传输大量数据。同时,gRPC还使用了基于平台优化的序列化和反序列化技术,提高了通信的效率。
  2. 简单易用:gRPC的IDL语言简单易懂,同时提供了自动生成代码的工具,方便用户进行开发。用户只需要定义好IDL,并生成代码后即可在代码中使用类似于本地函数调用的方式进行远程过程调用。
  3. 多语言支持:gRPC支持多种编程语言,如C++, Java, Python, Go, Ruby等,可以在不同编程语言之间进行RPC调用。
  4. 可扩展性:gRPC支持各种扩展,包括拦截器、负载均衡、认证和授权等,可以满足不同场景下的需求。
  5. 安全性:gRPC支持SSL/TLS安全传输,同时还提供了基于Token的认证机制,确保通信的安全性。

总之,gRPC提供了一种高效、可扩展、多语言、安全的RPC框架,适用于大规模分布式系统中的服务间通信,如微服务架构。

本文以go为例,介绍如何使用gRPC开发一个简单服务。

2. 准备工作

2.1 安装protoc

github系统对应的protoc预编译版,解压到/usr/local/下,以v22.3为例,具体操作如下:

wget https://github.com/protocolbuffers/protobuf/releases/download/v22.3/protoc-22.3-linux-x86_64.zip
unzip protoc-22.3-linux-x86_64.zip -d /usr/local/
ldconfig 
protoc --version
# libprotoc 22.3

2.2 安装go相关插件

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

3. 实践

3.1 编写proto文件

syntax = "proto3";

option go_package = "./;hello";

package hello;

message HelloRequest
    string name = 1;


message HelloResponse
    string message = 1;


service ExampleService
    rpc SayHi (HelloRequest) returns (HelloResponse);

service ExampleService就是我们定义的服务,rpc SayHi (HelloRequest) returns (HelloResponse);就是服务中提供的接口,protoc会根据我们定义的proto文件生成相应的代码。

3.2 使用protoc生成代码

终端下执行以下命令即可生成我们需要的代码:

protoc --go_out=. --go-grpc_out=. hello.proto

--go_out指定go文件的生成目录,--go-grpc_out指定grpc文件的生成目录

此时打开生成的go文件大概率会发现飘红报错,此时可以在当前目录下执行go mod tidy同步下依赖即可。

3.3 编写服务端代码

示例只是简单实现一个echo服务,服务端代码如下:

package main

import (
	"context"
	"net"

	pb "github.com/mengbin92/hello/protos/hello"
	"google.golang.org/grpc"
)

// 服务实体
type HelloService struct 
	pb.UnimplementedExampleServiceServer


// 实现我们proto文件定义的接口
func (sv *HelloService) SayHi(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) 
	return &pb.HelloResponseMessage: "hello " + in.Name, nil


func main() 
	// 创建grpc服务示例
	sv := grpc.NewServer()
	// 注册我们的服务
	pb.RegisterExampleServiceServer(sv, new(HelloService))

	// 绑定端口,提供服务
	lis, err := net.Listen("tcp", ":50001")
	if err != nil 
		panic(err)
	
	// 启动服务
	sv.Serve(lis)

启动服务后,服务端会一直阻塞等待客户端的链接,直到收到kill信号:

go run server.go

3.4 实现客户端

package main

import (
	"context"
	"fmt"

	pb "github.com/mengbin92/hello/protos/hello"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
)

func main() 
	// 创建grpc连接
	conn, err := grpc.Dial("localhost:50001", grpc.WithTransportCredentials(insecure.NewCredentials()))
	if err != nil 
		panic(err)
	
	defer conn.Close()

	// 实例化客户端
	client := pb.NewExampleServiceClient(conn)

	// 发送请求
	req := &pb.HelloRequestName: "world"
	resp, err := client.SayHi(context.TODO(), req)
	if err != nil 
		panic(err)
	
	fmt.Printf("get response from server: %s\\n", resp.Message)

客户端启动后向服务端发送world,服务端返回hello world

go run client.go
# get response from server: hello world

至此,一个简单的gRPC服务就已经搞定了。


声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意


grpc学习入门(代码片段)

grpc框架参考资料:官方文档教学grpc-go入门https://www.cnblogs.com/hongjijun/p/13724738.htmlGRPC是Google公司基于Protobuf开发的跨语言的、高性能的、通用的开源RPC框架。GRPC基于HTTP/2协议设计,可以基于一个HTTP/2链接提供多个服务,... 查看详情

grpc入门(代码片段)

一、gRPC简介在介绍gRPC之前先说一下RPC(RemoteProcedureCall),也叫远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。相比HTTP协议来说,它主要是基于TCP/IP协议的的,传输效率更... 查看详情

window下golang使用grpc入门案例(代码片段)

一、检查golang的安装环境https://golang.org/dl/需要墙,或者在这里下载https://pan.baidu.com/s/12tTmrVIel6sfeBInpt9lQA最新版本1.10下载msi安装即可goversion验证安装 查看详情

grpc入门与实操(.net篇)(代码片段)

为什么选择gRPC历史长久以来,我们在前后端交互时使用WebApi+JSON方式,后端服务之间调用同样如此(或者更久远之前的WCF+XML方式)。WebApi+JSON是优选的,很重要的一点是它们两者都是平台无关的三方标准,且足够语义化,便于程... 查看详情

grpc入门(代码片段)

1.gRPC简介gRPC是一种高性能、开源和通用的远程过程调用(RPC)框架,由Google开源并维护。它使用ProtocolBuffers(protobuf)作为接口定义语言(IDL),提供跨平台、跨语言的RPC调用支持。gRPC具有以下几个特点:高性能:使用HTTP/2协... 查看详情

grpc入门与实操(.net篇)(代码片段)

为什么选择gRPC历史长久以来,我们在前后端交互时使用WebApi+JSON方式,后端服务之间调用同样如此(或者更久远之前的WCF+XML方式)。WebApi+JSON是优选的,很重要的一点是它们两者都是平台无关的三方... 查看详情

高质量通信grpc入门,有了它,谁还用socket(代码片段)

1含义RPC(remoteprocedurecall远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。gRPC是一个高性能、... 查看详情

一个简单的案例入门grpc(代码片段)

这篇文章本来要在年前和小伙伴们见面,但是因为我之前的Mac系统版本是10.13.6,这个版本比较老,时至今天在运行一些新鲜玩意的时候有时候会有一些BUG(例如运行最新版的Nacos等),运行gRPC的插件也有BU... 查看详情

一个简单的案例入门grpc(代码片段)

这篇文章本来要在年前和小伙伴们见面,但是因为我之前的Mac系统版本是10.13.6,这个版本比较老,时至今天在运行一些新鲜玩意的时候有时候会有一些BUG(例如运行最新版的Nacos等),运行gRPC的插件也有BU... 查看详情

3.微服务--grpc(代码片段)

1.gRPC入门1.1gRPC简介gRPC由google开发,是一款语言中立、平台中立、开源的远程过程调用系统gRPC客户端和服务端可以在多种环境中运行和交互,例如用java写一个服务端,可以用go语言写客户端调用1.2gRPC与Protobuf介绍微服务架构中,... 查看详情

grpc与boto3理解与使用(代码片段)

文章目录gRPCBoto3gRPCPythongRPC入门按照上面那个例子运行,下面主要讲讲遇到的问题和发现的一些事情python中运行client有问题,可以加入下面的代码解决os.environ['http_proxy']=""os.environ['https_proxy']="... 查看详情

grpc快速入门——protobuf序列化原理解析(代码片段)

gRPC快速入门(二)——Protobuf序列化原理解析一、Protobuf序列化原理简介1、序列化序列化是将数据结构或对象转换成二进制字节流的过程。Protobuf对于不同的字段类型采用不同的编码方式和数据存储方式对消息字段进行序列化,... 查看详情

grpc(代码片段)

文章引自 gRPC快速入门gRPCRPC是什么在分布式计算,远程过程调用(英语:RemoteProcedureCall,缩写为RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的... 查看详情

grpc,protoc,protoc-gen-go,rust(代码片段)

...ps://segmentfault.com/a/1190000015042409  SpringBoot中使用grpc入门https://www.cnblogs.com/sevenyuan/p/8535382.html protobuffer、gRPC、restfulgRPC的相互转化Howtofixthisissuewithgrpcmethodhandler8Basicallyyourprotoc-gen-godoesn‘tmatcht 查看详情

漫谈grpc2:实战grpc,跨语言的rpc框架到底好不好用,试试就知道(代码片段)

...个HTTP/2链接提供多个服务,对于移动设备更加友好。入门首先来看一个最简单的gRPC服务,第一步是定义proto文件,因为gRPC也是C/S架构,这一步相当于明确接口规范。protosyntax = "proto3";package proto;// The gr... 查看详情

深入浅出掌握grpc通信框架(代码片段)

...架,为了弄清楚Alluxio服务端的线程模型,必然需要对Grpc代码有所掌握。本文先介绍Grpc底层HTTP2的知识,通过一个GRPC项目,深入GRPC源码,探索GRPC的线程模型。2.Grpc简介GRPC是Google推出的RPC框架。并且支持多种语言。GRPC的几种模... 查看详情

gogrpc入门(代码片段)

前言最近较忙,其实准备一篇搞定的中途有事,只能隔了一天再写正文pb.go需要注意的是,在本个demo中,客户端与服务端都是Golang,所以在客户端与服务端都公用一个pb.go模板文件(如果是不同的语言生成的pb是对应语言),可以将pb.go文件... 查看详情

grpc安装(代码片段)

安装请参考官方资料-快速开始,安装gRPC需要安装Go、protocolbuffer、protoc-gen-go、gRPC等。1.安装Go,grpc是用Golang开发的,所以需要安装Go;2.下载protocolbuffer,这是gRPC的协议编译工具,写好proto之后,需要用这个编译。windows下直接下... 查看详情