gRPC的最简单使用方法

gRPC是一个高性能、开源的RPC框架,可在任何环境下运行,支持负载平衡、跟踪、健康检查和身份验证。其核心是基于.proto文件定义服务,可生成多种语言的服务器和客户端代码,实现跨平台通信。通过gRPC,开发者可以轻松构建分布式系统,实现设备、应用和后台服务间的高效通信。
摘要由CSDN通过智能技术生成

目录

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

RPC(Remote procedure call)

gRPC is a modern open source high performance Remote Procedure Call (RPC) framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authentication. It is also applicable in last mile of distributed computing to connect devices, mobile applications and browsers to backend services.
在分布式计算中,远程过程调用(RPC)是指计算机程序使过程(子例程)在不同的地址空间(通常在共享网络上的另一台计算机上)中执行,该地址空间被编码为正常(本地)过程调用,没有程序员明确编码远程交互的细节。也就是说,无论子程序是执行程序的本地程序还是远程程序,程序员都编写基本相同的代码。这是一种客户机-服务器交互形式(调用者是客户机,执行者是服务器),通常通过请求-响应消息传递系统实现。在面向对象编程范例中,RPC由远程方法调用(RMI)表示。RPC模型意味着位置透明性的级别,即调用过程在很大程度上是相同的,无论它们是本地的还是远程的,但是它们通常是不相同的,因此可以区分本地调用和远程调用。远程呼叫通常比本地呼叫慢几个数量级,可靠性更低,因此区分它们很重要。

GRPC

gRPC is a modern open source high performance Remote Procedure Call (RPC) framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authentication. It is also applicable in last mile of distributed computing to connect devices, mobile applications and browsers to backend services.
gRPC是一个现代的开源高性能远程过程调用(RPC)框架,可以在任何环境中运行。它可以通过可插拔的负载平衡、跟踪、健康检查和身份验证支持,有效地连接数据中心内和数据中心之间的服务。它也适用于分布式计算的最后一英里,将设备、移动应用程序和浏览器连接到后端服务。

开始

官方仓库:https://github.com/grpc/grpc。
官网:https://www.grpc.io/。写的很清楚。
底层原理我就不咋了解了只知道最基础的用法怎么用。
首先按官网的快速开始操作步骤把grpc和gRPC tools装好。
Python的gRPC工具包括协议缓冲区编译器(protocol buffer compiler)protoc和用于从.proto服务定义生成服务器和客户端代码的特殊插件。
关键的配置文件是.proto文件,官方示例如下:

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

Greeter是一个服务,一个服务里可以有很多函数。下面定义的可以看成是一个结构体,=1表示这是第一个参数,=2就表示第二个参数,string是参数类型,还有int32啥的。
之后就可以用这个proto生成不同语言的服务器和客户端代码,服务器和客户端不需要使用一样的语言。
python用起来是真的方便,Java我不太会所以配的有点难受。
生成服务器和客户端之后,导入到你的项目里。你需要自己实现proto里的那些函数,然后按官网的写法开启服务器和客户端就可以成功用上gRPC啦。

Java使用gRPC进行简单使用包括以下几个步骤: 1. 定义.proto文件:首先,你需要定义一个.proto文件,用于描述你的服务和消息格式。这个文件可以使用Protocol Buffers语言编写。例如,你可以定义一个简单的服务和消息格式如下: ```protobuf syntax = "proto3"; package com.example; service GreetingService { rpc SayHello(HelloRequest) returns (HelloResponse); } message HelloRequest { string name = 1; } message HelloResponse { string message = 1; } ``` 2. 生成Java代码:一旦你定义了.proto文件,你可以使用gRPC的编译器将其生成为Java代码。你可以使用以下命令生成代码: ```bash protoc --java_out=<output_directory> <proto_file>.proto ``` 这将生成与.proto文件相匹配的Java类。 3. 实现服务逻辑:在服务器端,你需要编写一个类来实现你定义的服务接口。例如,对于上面的例子,你可以编写一个GreetingServiceImpl类来实现GreetingService接口: ```java package com.example; import io.grpc.stub.StreamObserver; public class GreetingServiceImpl extends GreetingServiceGrpc.GreetingServiceImplBase { @Override public void sayHello(HelloRequest request, StreamObserver<HelloResponse> responseObserver) { String greeting = "Hello, " + request.getName() + "!"; HelloResponse response = HelloResponse.newBuilder().setMessage(greeting).build(); responseObserver.onNext(response); responseObserver.onCompleted(); } } ``` 4. 启动服务器:你需要编写一个服务器类来启动gRPC服务器并注册你的服务实现类。例如: ```java package com.example; import io.grpc.Server; import io.grpc.ServerBuilder; import java.io.IOException; public class ServerMain { public static void main(String[] args) throws IOException, InterruptedException { Server server = ServerBuilder.forPort(50051) .addService(new GreetingServiceImpl()) .build(); server.start(); System.out.println("Server started"); server.awaitTermination(); } } ``` 5. 创建客户端:最后,你可以编写一个客户端类来调用你的服务。例如: ```java package com.example; import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; public class ClientMain { public static void main(String[] args) { ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 50051) .usePlaintext() .build(); GreetingServiceGrpc.GreetingServiceBlockingStub stub = GreetingServiceGrpc.newBlockingStub(channel); HelloRequest request = HelloRequest.newBuilder().setName("Alice").build(); HelloResponse response = stub.sayHello(request); System.out.println(response.getMessage()); channel.shutdown(); } } ``` 这样,你就可以使用gRPC进行简单通信了。在实际使用中,你可能还需要处理错误、流式传输等更复杂的场景。你可以参考gRPC的官方文档和示例来深入了解更多用法和细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值