Grpc初体验

简介: Grpc初体验

Grpc初体验


前言


因为最近工作涉及到了grpc, 但是不是很了解这个框架, 所以就看了一手 grpc官方文档, 克隆下来代码简单的了解一下


概念

定义一个服务, 指定其可以被远程调用的方法及其参数和返回类型。gRPC 默认使用 protocol buffers 作为接口定义语言,来描述服务接口和有效载荷消息结构。允许定义四种服务方法

1 单项 RPC,即客户端发送一个请求给服务端,从服务端获取一个应答,就像一次普通的函数调用
2 服务端流式 RPC,即客户端发送一个请求给服务端,可获取一个数据流用来读取一系列消息。客户端从返回的数据流里一直读取直到没有更多消息为止。
3 客户端流式 RPC,即客户端用提供的一个数据流写入并发送一系列消息给服务端。一旦客户端完成消息写入,就等待服务端读取这些消息并返回应答
4 双向流式 RPC,即两边都可以分别通过一个读写数据流来发送一系列消息。这两个数据流操作是相互独立的,所以客户端和服务端能按其希望的任意顺序读写,

主要使用


gRPC 提供 protocol buffer 编译插件,能够从一个服务定义的 .proto 文件生成客户端和服务端代码。通常 gRPC 用户可以在服务端实现这些API,并从客户端调用它们。

测试


服务端


测试使用的话就是按照官方文档的教程来的

git clone https://github.com/grpc/grpc.git


拉一手代码然后直接进到demo目录就可以, 我主要看了一下 Python和 Go的, 目录 grpc/examples/python/helloworld, 里面的代码都是生成好的, 可以直接使用, 如果有兴趣的也可以按照教程从头开始


在目录里 greeter_server.py 是服务端, 在里面定义了一个Greeter的类, 包括里面的一个 SayHello 方法(接受参数, 返回响应)

class Greeter(helloworld_pb2_grpc.GreeterServicer):
    def SayHello(self, request, context):
        return helloworld_pb2.HelloReply(message='Yes, %s!' % request.name)
def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    try:
        while True:
            time.sleep(_ONE_DAY_IN_SECONDS)
    except KeyboardInterrupt:
        server.stop(0)

可以看到在server里面首先定义了一个最大处理数为10的线程池, 然后将 Greeter 类作为服务添加, 在添加50051作为服务端口, start启动服务


客户端

def run():
    # NOTE(gRPC Python Team): .close() is possible on a channel and should be
    # used in circumstances in which the with statement does not fit the needs
    # of the code.
    a = time.time()
    with grpc.insecure_channel('localhost:50051') as channel:
        stub = helloworld_pb2_grpc.GreeterStub(channel)
        response = stub.SayHello(helloworld_pb2.HelloRequest(name='小飞'))
        print(response)
    print("time = ", time.time()-a)
    print("Greeter client received: " + response.message)

客户端就比较简单了, 通过grpc 连上50051端口携带参数发起请求, 再接受服务端返回的详情就ok


proto文件


gRPC 默认使用 protocol buffers 作为接口定义语言, 所以需要编写 proto文件定义 gRPC接口, 进行编译生成 helloworld_pb2 和helloworld_pb2_grpc文件, 也就是客户端和服务端之间的通信, 里面会定义接口接收参数和返回参数.

目录
相关文章
|
2天前
|
NoSQL Ubuntu 测试技术
GRPC C++开发环境搭建
GRPC C++开发环境搭建
73 0
|
6月前
|
开发框架 JavaScript .NET
Golang微服务框架kratos实现SignalR服务
SignalR 在可用的情况下使用新的 WebSocket 传输,并在必要时回退到旧传输。 虽然当然可以直接使用 WebSocket 编写应用,但使用 SignalR 意味着需要实现的许多额外功能已经为你完成。 最重要的是,这意味着你可以编写应用代码以利用 WebSocket,而无需担心为旧客户端创建单独的代码路径。 SignalR 还可以避免担心 WebSocket 的更新,因为 SignalR 已更新以支持基础传输中的更改,从而为应用程序提供跨 WebSocket 版本的一致接口。
40 0
|
7月前
|
负载均衡
gRPC源码分析(二):从官网文档看gRPC的特性
在第一部分,我们学习了gRPC的基本调用过程,这样我们对全局层面有了一定了解。接下来,我们将结合官方文档,继续深入学习、探索下去。
28 0
|
7月前
|
Java 编译器 API
gRPC 初探与简单使用
gRPC 初探与简单使用
35 0
|
9月前
|
负载均衡 安全 Cloud Native
2023-5-15-gRpc框架学习
2023-5-15-gRpc框架学习
112 0
|
11月前
|
存储 网络协议 中间件
开源 Golang 微服务入门一: HTTP 框架 Hertz
Hertz 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp、gin、echo 的优势, 并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点
411 0
|
12月前
|
Java Go Maven
一个简单的案例入门 gRPC
一个简单的案例入门 gRPC
|
XML JSON 网络协议
gRPC笔记与相关问题
gRPC笔记与相关问题
|
网络协议 中间件 Go
Go微服务(三)——gRPC详细入门 下
Go微服务(三)——gRPC详细入门 下
349 0
Go微服务(三)——gRPC详细入门 下