前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >gRPC Node.js快速开始

gRPC Node.js快速开始

作者头像
ccf19881030
发布于 2020-11-24 04:42:46
发布于 2020-11-24 04:42:46
1.9K00
代码可运行
举报
文章被收录于专栏:ccf19881030的博客ccf19881030的博客
运行总次数:0
代码可运行

gRPC Node.js快速开始

本文翻译自gRPC官网的Node.js示例,链接地址为:https://www.grpc.io/docs/languages/node/Quick start

gRPC是一个高性能、开源的通用RPC框架,其官方地址为:https://www.grpc.io/,如下图所示:

目前gRPC项目已经托管到Github上面,其Github仓库地址为:https://github.com/grpc/grpc

快速开始

本指南通过一个简单的示例使您开始在Node中使用gRPC。

先决条件

Node版本4.0.0或更高版本

下载示例

您需要本示例代码的本地副本才能完成此快速入门。 从我们的GitHub存储库下载示例代码(以下命令将克隆整个存储库,但是您仅需要有关此快速入门和其他教程的示例):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Clone the repository to get the example code
$ git clone -b v1.33.2 https://github.com/grpc/grpc
# Navigate to the dynamic codegen "hello, world" Node example:
$ cd grpc/examples/node/dynamic_codegen
# Install the example's dependencies
$ npm install

运行gRPC应用程序

在examples/node/dynamic_codegen目录中:

  • 1.运行服务端:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ node greeter_server.js
  • 2.从另一个终端,运行客户端:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ node greeter_client.js

恭喜你! 您刚刚使用gRPC运行了客户端服务器应用程序。

注意 在gRPC服务端和客户端程序运行之前需要在本地使用npm或者yarn安装所需的依赖库。针对gRPC v1.33.2的Node版本,需要安装grpc@grpc/proto-loader依赖库,对于目前最新的gRPC Node版本,则需要安装@grpc/grpc-js@grpc/proto-loader依赖库。 假如使用的是gRPC v1.33.2的Node版本的源代码,如果使用的是npm,在grpc/examples/node/dynamic_codegen目录下,执行如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm init -y
npm install grpc @grpc/proto-loader

如果使用的是yarn,在grpc/examples/node/dynamic_codegen目录下,执行如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yarn init -y
yarn add grpc @grpc/proto-loader

下面是我在Windows10下使用grpc github仓库的最新grpc代码node示例程序运行的结果,使用之前需要安装Node.js开发环境和npm、cnpm、yarn等,然后在grpc源代码的grpc\examples\node\dynamic_codegen目录下使用yarn安装@grpc/grpc-js@grpc/proto-loader依赖库,命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yarn init -y
yarn add @grpc/grpc-js '@grpc/proto-loader

然后分别运行服务端和客户端,如下图所示:

更新gRPC服务

现在,让我们看一下如何使用服务器上的其他方法更新应用程序,以供客户端调用。 我们的gRPC服务是使用protocol buffers的; 您可以在基础知识教程中找到更多有关如何在.proto文件中定义服务的信息。 现在,您只需要知道服务器和客户端“stub”都有一个SayHelloRPC方法,该方法从客户端获取HelloRequest参数,并从服务器返回HelloReply,并且该方法的定义如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 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服务具有两种方法。 编辑examples/protos/helloworld.proto并使用具有相同请求和响应类型的新SayHelloAgain方法对其进行更新:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Sends another greeting
  rpc SayHelloAgain (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_server.js。 像这样实现新方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function sayHello(call, callback) {
  callback(null, {message: 'Hello ' + call.request.name});
}

function sayHelloAgain(call, callback) {
  callback(null, {message: 'Hello again, ' + call.request.name});
}

function main() {
  var server = new grpc.Server();
  server.addService(hello_proto.Greeter.service,
                         {sayHello: sayHello, sayHelloAgain: sayHelloAgain});
  server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure());
  server.start();
}

更新客户端

在同一目录中,打开greeter_client.js。 像这样调用新方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function main() {
  var client = new hello_proto.Greeter('localhost:50051',
                                       grpc.credentials.createInsecure());
  client.sayHello({name: 'you'}, function(err, response) {
    console.log('Greeting:', response.message);
  });
  client.sayHelloAgain({name: 'you'}, function(err, response) {
    console.log('Greeting:', response.message);
  });
}

运行!

就像我们之前一样,从examples/node/dynamic_codegen目录:

  • 1.运行服务器:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ node greeter_server.js
  • 2.从另外一个终端,运行客户端:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ node greeter_client.js

下面是我在自己购买的阿里云服务器上运行服务端和客户端的演示结果:

下一步是什么

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/11/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
gRPC cpp 框架快速上手
在gRPC框架中,运行在不同机器上的客户端应用可以直接调用服务器端上「提供的方法」,使得我们可以更容易的创建一个分布式系统。
Mculover666
2021/11/02
1.1K0
grpc-java快速体验
公司内部有的服务提供的是grpc协议的接口,所以使用demo快速了解一下 快速体验 下载源码 $ git clone -b v1.38.0 https://github.com/grpc/grpc-java 编译 $ cd grpc-java/examples $ ./gradlew installDist 运行服务器端 $ ./build/install/examples/bin/hello-world-server INFO: Server started, listening on 50051
十毛
2021/07/01
4770
Golang笔记 6.3 RPC 编程之 gRPC
先了解几个基本概念,https://grpc.io/docs/guides/concepts/
twowinter
2020/04/17
1.5K0
gRPC示例初探【实战笔记】
备注:Will try to greet world ...这条日志在Client端访问Server前打印;Greeting: Hello world 这条日志在Server返回给Client后打印。
瓜农老梁
2019/11/12
8330
gRPC示例初探【实战笔记】
开发基于 gRPC 协议的 Node 服务【Node进阶】
在 Shopee 任职期间,我在开发 gRPC 协议的 node 微服务时有过不错的一些实践,配置中心、差分服务、官网服务等。因此我写下这篇文章,做一些些的总结,记录一下碰到的问题、解决的方法以及一些个人的小小见解。
coder_koala
2021/07/08
9760
开发基于 gRPC 协议的 Node 服务【Node进阶】
grpc-node 源码阅读笔记[0]
贴一张挂在官网的图片:https://grpc.io/docs/what-is-grpc/introduction/
贾顺名
2020/12/02
1.1K0
72.精读《REST, GraphQL, Webhooks, & gRPC 如何选型》
每当项目进入联调阶段,或者提前约定接口时,前后端就会聚在一起热火朝天的讨论起来。可能 99% 的场景都在约定 Http 接口,讨论 URL 是什么,入参是什么,出参是什么。
黄子毅
2022/03/14
6140
go grpc 初步笔记
像许多RPC系统一样,gRPC基于定义服务的思想,指定可以使用其参数和返回类型远程调用的方法。
solate
2019/07/22
6270
grpc官方文档实验与翻译(python
tensorflow分布式与tensorflow serving底层通信都是是用的grpc,所以就看了一下grpc的基本用法(python版)
py3study
2020/01/09
1K0
grpc官方文档实验与翻译(python
使用 grpcurl 通过命令行访问 gRPC 服务
一般情况下测试 gRPC 服务,都是通过客户端来直接请求服务端。如果客户端还没准备好的话,也可以使用 BloomRPC 这样的 GUI 客户端。
AlwaysBeta
2021/09/30
3.7K1
Python gRPC 入门
gRPC 也是基于以下理念:定义一个*服务*,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个*存根*能够像服务端一样的方法。
goodspeed
2020/12/22
1K0
Python gRPC 入门
Rust使用gRPC
需要先安装protoc(Protocol Buffers Compiler),可据此Protobuf Compiler Installation[1]下载
fliter
2024/01/09
2470
Rust使用gRPC
Golang 语言 gRPC 怎么使用?
在之前的两篇文章中,我们已经介绍了使用 gRPC 创建 RPC 应用的前导知识。我们了解到 gRPC 支持多语言,本文我们介绍在 Golang 语言中怎么使用 gRPC。
frank.
2021/09/29
1.6K0
gRPC-Java 的快速实践
在 Java 的单体应用中,想要进行不同层级间的调用通常使用Spring的依赖注入。而到了分布式系统中,服务上下文变成了通信上下文,每一次调用变成了网络请求。这对于业务开发来说,会浪费一定时间来考虑这些冗余代码。
花花Binki
2025/01/03
880
ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)
早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把。同时记录体验的过程。如果你也想按照本文的步骤体验的话,那你得先安装.NET Core3.0预览版的SDK。至于开发工具我用的时VS2019,当然你也可以使用VS Code进行。
依乐祝
2019/04/09
1.7K0
ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)
【每周一库】- Tonic 基于Rust的gRPC实现
gRPC的rust实现,高性能,开源,为移动设备与HTTP/2准备的通用RPC框架
MikeLoveRust
2020/07/28
1.6K0
2.Hello World gRPC
AI码师
2023/09/11
2800
2.Hello World gRPC
基于内存通信的gRPC调用
Apache Dubbo 有injvm方式的通信,能够避免网络带来的延迟,同时也不占用本地端口,对测试、本地验证而言,是一种比较方便的RPC通信方式。
Robert Lu
2021/11/24
1.4K0
.NET7 gRPC JSON转码+OpenAPI
gRPC JSON 转码允许浏览器应用调用 gRPC 服务,就像它们是使用 JSON 的 RESTful API 一样。
Chester Chen
2022/12/19
1.3K0
.NET7 gRPC JSON转码+OpenAPI
.NET gRPC核心功能初体验
gRPC是高性能的RPC框架, 有效地用于服务通信(不管是数据中心内部还是跨数据中心)。
有态度的马甲
2021/03/12
1.8K0
.NET gRPC核心功能初体验
相关推荐
gRPC cpp 框架快速上手
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验