关于Grpc的学习

gRPC学习 在gRPC中,客户端应用程序可以不同的机器上像调用本地方法一样,直接调用服务器应用程序上的方法,使得更容易创建分布式应用和服务。gRPC是基于定义服务的思想,指定可以远程调用的方法及其参数和返回类型。在服务端,服务端实现此接口并运行gRPC服务器来处理客户端调用。在客户端,客户端有一个stub,提供与服务器相同的方法。正在上传…重新上传取消1)使用protocol buffers默认情况下,gRPC使用protocol buffers,其是谷歌用于序列化结构化数据的开源框架。 阅读详情

本文较为简略,只是介绍了一个大概的流程,具体的开发后面博文可见。

一、定义:定义一个服务,指定其能被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,同时运行一个grpc服务器来处理客户端调用。客户端拥有一个文件(存根)可以访问服务端。

二、依赖:protocol buffers,谷歌开源的结构数据序列化机制(类似json),通过使用proto file创建grpc服务,protocol buffers 消息类型来定义方法参数和返回类型。。我们在使用gprc时,使用版本是proto 3,针对c++和Java还有go都有支持。

三、测试环境:git、Java需要jdk

四、测试:

 

一、下载grpc源码:

git clone https://github.com/grpc/grpc-java.git
cd grpc-java/examples

二、定义服务:通过proto buffers 的proto 3 版本实现,proto buffer使用接口定义语言来实现服务方法、请求参数、返回类型。客户端和服务端均使用服务定义生成的接口代码。

在helloworld.proto 使用Greeter 服务有一个方法 SayHello ,可以让服务端从远程客户端接收一个包含用户名的 HelloRequest 消息后,在一个 HelloReply 里发送回一个 Greeter。

syntax = "proto3";

option java_package = "io.grpc.examples";

package helloworld;

// The greeter 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;
}

三、生成grpc代码:

使用编译器protoc生成客户端和服务器端所需的代码。

生成HelloRequest.java, HelloResponse.java和其他文件包含所有 protocol buffer 用来填充、序列化和提取 HelloRequest 和 HelloReply 消息类型的代码。

GreeterGrpc.java, 包含 (还有其他有用的代码):

Greeter 服务端需要实现的接口

        public static interface Greeter {
        public void sayHello(Helloworld.HelloRequest request,
        StreamObserver<Helloworld.HelloReply> responseObserver);
        }

客户端用来与 Greeter 服务端进行对话的 存根 类。就像你所看到的,异步存根也实现了 Greeter 接口。

    public static class GreeterStub extends AbstractStub<GreeterStub>
    implements Greeter {
      ...
    }

四、写一个服务器

GreeterImpl.java准确地实现了 Greeter 服务所需要的行为。 正如你所见,GreeterImpl 类通过实现 sayHello 方法,实现了从 IDL生成的GreeterGrpc.Greeter 接口 。

@Override
public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) {
HelloReply reply = HelloReply.newBuilder().setMessage("Hello " + req.getName()).build();
responseObserver.onNext(reply);
responseObserver.onCompleted();
}

sayHello 有两个参数:

  • HelloRequest,请求。
  • StreamObserver<HelloReply>: 应答观察者,一个特殊的接口,服务器用应答来调用它。

    为了返回给客户端应答并且完成调用:

1.用我们的激动人心的消息构建并填充一个在我们接口定义的 HelloReply 应答对象。

2.将 HelloReply 返回给客户端,然后表明我们已经完成了对 RPC 的处理.

五、服务端实现

确认服务在服务端有可用合理的 gRPC 服务器,将我们实现的 Greeter 服务绑定到一个端口。然后我们启动服务器:服务器现在已准备好从 Greeter 服务客户端接收请求。我们将在具体语言对应的文档里更深入地了解这所有的工作是怎样进行的。

/* The port on which the server should run */
private int port = 50051;
private Server server;
private void start() throws Exception {
server = ServerBuilder.forPort(port)
    .addService(GreeterGrpc.bindService(new GreeterImpl()))
    .build()
    .start();
logger.info("Server started, listening on " + port);
Runtime.getRuntime().addShutdownHook(new Thread() {
  @Override
  public void run() {
    // Use stderr here since the logger may has been reset by its JVM shutdown hook.
    System.err.println("*** shutting down gRPC server since JVM is shutting down");
    HelloWorldServer.this.stop();
    System.err.println("*** server shut down");
  }
});
}

六、写一个客户端

客户端的 gRPC 非常简单。在这一步,我们将用生成的代码写一个简单的客户程序来访问我们在上一节里创建的 Greeter 服务器。

1.连接服务:连接 Greeter 服务器。我们需要创建一个 gRPC 频道,指定我们要连接的主机名和服务器端口。然后我们用这个频道创建存根实例。

private final ManagedChannel channel;
private final GreeterGrpc.GreeterBlockingStub blockingStub;
public HelloWorldClient(String host, int port) {
channel = ManagedChannelBuilder.forAddress(host, port)
    .usePlaintext(true)
    .build();
blockingStub = GreeterGrpc.newBlockingStub(channel);
}

2.调用 RPC:现在我们可以联系服务并获得一个 greeting,

  1. 我们创建并填充一个 HelloRequest 发送给服务。
  2. 我们用请求调用存根的 SayHello(),如果 RPC 成功,会得到一个填充的 HelloReply ,从其中我们可以获得 greeting。
HelloRequest req = HelloRequest.newBuilder().setName(name).build();
HelloReply reply = blockingStub.sayHello(req);

七、运行

不同的语言间的互操作性,即在不同的语言运行客户端和服务端。每个服务端和客户端使用从同一过 proto 文件生成的接口代码,则意味着任何 Greeter 客户端可以与任何 Greeter 服务端对话。

Java 首先运行服务端:你可以从 examples 目录构建并运行服务端。

首先构建客户端和服务端:

$ ../gradlew -PskipCodegen=true installDist

然后运行服务端,服务端将监听 50051 :

$ ./build/install/grpc-examples/bin/hello-world-server

一旦服务器在运行,在其他的终端窗口运行客户端并确认它收到一个消息。你可以在 examples 目录下构建并运行客户端。假如你还没有构建客户端,可以使用如下命令:

$ ../gradlew -PskipCodegen=true installDist

然后运行客户端:

$ ./build/install/grpc-examples/bin/hello-world-client

1. 【gRPC系列学习】 gRPC起源、优缺点 gRPC的优缺点 阅读详情

相关推荐

从零开始理解异构算力调度:全国一体化算力算网平台实战解析

本文深入解析了异构算力调度技术在全国一体化算力算网平台中的实战应用。通过资源抽象层设计、动态感知引擎和跨云调度算法,实现AI训练任务的高效资源分配,显著提升计算效率并降低成本。特别针对GPU等异构算力的智能调度方案,为多云协同环境下的AI开发提供实用指南。

weixin_28730927的博客 333

gRPC入门教程

gRPC 是 Google 开源的一个高性能的 RPC(Remote Procedure Call) 框架。(由Google内部RPC项目Stubby演化而来,2015年正式开源)低延迟、高度可扩展的分布式系统。开发与云服务器通信的移动客户端。设计一个需要准确、高效且独立于语言的新协议。分层设计以实现扩展,例如。身份验证、负载平衡、日志记录和监控等。网络通信协议序列化代理的创建gRPC自己封装了网络通信的部分,提供了多种语言的网络通信封装。

Javaer 2135

Python小波变换实战:用PyCWT分析气候数据(附完整代码)

本文详细介绍了如何使用Python中的PyCWT库进行小波变换分析,特别针对气候数据(如NINO3海温异常数据)的多尺度周期性特征提取。通过完整的代码示例,从数据预处理、小波参数配置到结果可视化,逐步指导读者掌握小波变换在气候研究中的实际应用。

weixin_29088655的博客 281

grpc学习

Protocol Buffers Protocol Buffers(Protobuf)是Google开发的一种二进制编码的数据序列化协议(类似于JSON)。Protobuf的主要目标是提供一种灵活、高效、自动化的方式来进行结构化数据的序列化、反序列化、存储和通信。个人理解是一种网络通信的信息的模板。 因为不同的编程语言有不同的内存管理、类型系统和调用约定等,所以跨语言和跨平台等不能直接通信。通常是通过某种网络协议或中间件来实现的,例如HTTP、gRPC等。Protocol Buffers就是为此类跨语言通

m0_51866860的博客 415

Abaqus子程序开发避坑指南:从UMESHMOTION到齿轮磨损分析实战

本文深入探讨Abaqus子程序开发中的关键技术与避坑指南,重点解析UMESHMOTION在齿轮磨损分析中的实战应用。从开发环境搭建、调试框架构建到性能优化和大规模计算,提供系统化的解决方案。通过真实案例展示如何避免内存泄漏、网格畸变等常见问题,并介绍数据驱动的磨损预测等前沿技术,帮助工程师提升仿真精度与效率。

weixin_30892037的博客 87

latex写论文(TeXstudio工具)

目录前言IEEE模板模板免费分享参考文献写作方法我的.tex文件代码 前言 学校老师要求我们以IEEE顶级会议格式与标准写报告,于是过程虽然麻烦点,但是效果还是不错了,下面先展示一下自己写完的效果。 IEEE模板 我是在 Overleaf 上注册了个账号下载了模板,里面有各种会议论文的写作模板,这个注册还挺麻烦,要外网注册,国内邮箱都不行。进行后点菜单,菜单里有下载源码。 https://cn.overleaf.com/project/5fe5b082dff088649fc67106 模板免费分享 已

小样yx的博客 6749

GRPC的学习

GRPC的入门、语法解析 学习grpc之前,得先了解一下什么是rpc远程调用?这里做一个简单的介绍,详细精确的介绍可以参考别的文章。 RPC框架: RPC,即Remote Procedure Call(远程过程调用),主要在TCP协议之上进行工作; HTTP,即HyperText Transfer Protocol(超文本传输协议),主要在HTTP协议之上进行工作。 常见的RPC框架: 非跨平台的: Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 Java

夏呆毛的博客 799

数理金融学笔记 Chap2 二叉树模型Binomial

2 二叉树模型与期权定价 Binomial Model and Option Pricing 文章目录2 二叉树模型与期权定价 Binomial Model and Option Pricing单期二叉树模型 One-step Binomial Model风险与无风险资产单期二叉树模型与无套利条件无套利定价 No Arbitrage Pricing风险中性定价 Risk Neutral PricingDelta套期保值 Delta Hedging两期二叉树模型 Two-Step Binomial Model

weixin_66831131的博客 2387

GRPC基本概念学习及安装教程

grpc基本概念的了解以及安装教程。

谬也的博客 6011

【AI产品与商业航图】Flux.1 完全开源 AI 绘图模型:本地部署与 ComfyUI 实战指南

Flux.1是一个开源项目,用户可以自由使用和修改,完全免除使用费用。🖥️本地部署支持:与一些依赖云端计算的工具不同,Flux.1支持本地部署,确保用户可以离线使用并自主控制数据隐私。🔄兼容ComfyUI框架:Flux.1可以无缝集成到ComfyUI中,用户可以享受更加简便和直观的操作界面。🎨卓越的图像生成能力:Flux.1能够生成高质量、细腻的图像,支持多种风格与创作主题的切换。💾低硬件要求。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1736

基于STM32L4XX 、HAL库的ATD5984步进电机驱动器驱动程序应用设计

一、简介: ATD5984是一款内部集成了译码器的微特步进电机 驱动器,能使双极步进电机以全、半、1/4、/1/8、1/16 和1/32步进模式工作。步进模式由逻辑输入管脚MSx选 择。其输出驱动能力达到28V±1.6A。 译码器是ATD5984易于使用的关键,通过STEP管脚 输入一个脉冲就可以使电机完成一次步进,省去了相序 表,高频控制线及复杂的编程接口,使其更适于没有复 杂的微处理器或微处理器负担过重的场合。 在步进操作期间,ATD5984的内部电路可以自动

PP_Cottage的博客 405

gRPC项目学习总结

gRPC项目学习总结 项目仓库 原教程视频 序列化对象为二进制和Json Go 将protobuf信息写入二进制文件 从二进制文件中读取protobuf信息 写入json文件并比较大小 //json.go // ProtobufToJson 将protobuf文件转换为json func ProtobufToJson(message proto.Message) ([]byte, error) { marshaler := protojson.MarshalOptions{ UseEnumNum

CRAJA的blog 894

永磁同步电机MTPA控制详解:从理论到实践的全方位指南

永磁同步电机(PMSM)凭借其高功率密度卓越的效率以及精准的控制性能,已在工业驱动、电动汽车和家用电器等领域获得广泛应用。而在PMSM的诸多控制策略中,最大转矩电流比(MTPA)控制因其能显著提升电机效率而占据核心地位。在输出特定转矩时,通过优化直轴电流(Id)和交轴电流(Iq)的分配,使定子电流的幅值最小化。对于电机测试工程师而言,理解MTPA意味着掌握了一把提升系统性能的关键钥匙。为什么这一点如此重要?因为定子电流的减小直接带来了铜损的降低。

优快云-新能源汽车研发测试专业博主 516

gRPC学习之二:GO的gRPC开发环境准备

protoc-gen-go和grpc包的安装过程都在install-grpc.sh中完成,该脚本内容如下所示,可见都是些很简单的操作:下载源码、解压、构建。

2401_86963149的博客 1187

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

gRPC学习笔记

参考资料 官网 中文文档 书籍:《gRPC与云原生应用开发》 书籍代码

Libertycsdn的博客 211

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【框架】gRPC学习笔记

第一步:熟悉代码第二步:尝试移植。

YZJincsdn的博客 215

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

GRPC学习

2 请求的数据怎么封装,响应的数据又怎么封装。也是通过protobuffer 做序列化。1 客户端发送一个sayhello 请求,服务器端怎么识别。定义proto 文件,传输数据类型,调用函数接口定义。可以用proto 生成接口,用cmake。1 把grpc编译成功。2 学习grpc范例。3 看proto文件。

nn的博客 319

应该如何去学习gRPC

学习 gRPC 的方法有以下几点建议: 了解 gRPC 的基本概念和特性:首先,您需要了解 gRPC 是什么,它的工作原理,以及与其他通信协议的比较。 学习 gRPC 的语言支持:gRPC 支持多种语言,因此您需要确定要学习的语言,并了解该语言的 gRPC 库。 实践:通过实际项目练习使用 gRPC,这将帮助您更好地理解 gRPC 的特性和用法。 阅读 gRPC 的官方文档:gRPC 的官...

weixin_42608318的博客 161

常见的RPC框架之gRPC深入学习

本文旨在分析 gRPC 框架相对于其他远程过程调用(RPC)框架的优势与劣势。通过比较 gRPC 与现有解决方案,我们评估其在现代分布式系统中的适用性。gRPC 是基于 HTTP/2 协议构建的,支持多种语言的 SDK。它使用 Protocol Buffers(protobuf)作为接口定义语言(IDL),以实现语言无关性和高效的数据序列化。

yang_ye的博客 1042

gRPC学习之二:GO的gRPC开发环境准备(1)

实际证明,用go get命令安装protoc-gen-go和grpc包的时候经常提示网络错误,于是我写了个shell脚本,将protoc-gen-go和grpc包的源码从GitHub下载下来,在本地编译构建,达到go get安装相同的效果;protoc-gen-go和grpc包的安装过程都在install-grpc.sh中完成,该脚本内容如下所示,可见都是些很简单的操作:下载源码、解压、构建。因此,接下来的操作是一个脚本完成protoc-gen-go和grpc包的安装;

2401_87361150的博客 1220

gRPC学习笔记记录以及整合gin开发

本片文章介绍了grpc的快速上手笔记和整合gin的举例

pedestrian_h的博客 1419

windows golang,consul,grpc学习

先新建一个目录proto,然后新建service.proto,复制下面的内容进去。

weixin_42094764的博客 684

GRPC学习笔记

grpc学习笔记

forget_1111的博客 1229

gRPC+protobuf学习

gRPC学习网站 https://grpc.io/docs/guides/ Golang protobuff 先安装protoc大环境: https://github.com/protocolbuffers/protobuf/releases 再安装针对于go的小环境 https://github.com/golang/protobuf echo学习 https://echo.la...

LiuHandsomes的博客 384
上一篇: 生成FISCO-BCOS浏览器(单机单节点)
下一篇: hyperledger composer 测试(一)1.21 基本概念
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值