nodejs如何使用_gRPC实战--如何在NodeJS中有效使用gRPC流

b08b3521fbb6c70dc0a639ea2bd77cb0.png

本文将说明如何在NodeJS应用程序的GRPC中使用流。

什么是gRPC中的流

gRPC中的流可帮助我们在单个RPC调用中发送消息流。

1492b42f0164c89da29c5bfc0943b880.png

gRPC 的流式,分为三种类型:

  • server-side streaming RPC:服务器端流式 RPC
  • Client-side streaming RPC:客户端流式 RPC
  • Bidirectional streaming RPC:双向流式 RPC

gRPC中的流使用场景

  • 大规模数据包
  • 实时场景

在本文中,我们将重点关注以下流:

  • Server Streaming GRPC:在这种情况下,客户端向服务器发出单个请求,服务器将消息流发送回客户端。
  • Client Streaming GRPC:在这种情况下,客户端将消息流发送到服务器。然后,服务器处理流并将单个响应发送回客户端。

Server Streaming gRPC

现在让我们为服务器流gRPC创建服务器和客户端代码。

创建 .proto 文件

创建一个名为proto的文件夹。在该文件夹中创建一个名为employee.proto的文件。将以下内容复制到employee.proto中:

syntax = "proto3";

package employee;

service Employee {

  rpc paySalary (EmployeeRequest) returns (stream EmployeeResponse) {}
}


message EmployeeRequest {
  repeated int32 employeeIdList = 1;
}

message EmployeeResponse{
  string message = 1;
}

请参阅我的grpc基础文章,以了解有关.proto文件和协议缓冲区的更多信息。

在这里,我们创建一个名为paySalary的rpc,它接受EmployeeRequest作为请求并发送EmployeeResponse流作为响应。我们使用关键字流来指示服务器将发送消息流。

上面也定义了EmployeeRequestEmployeeResponse。 repeate关键字表示将发送数据列表。

在此示例中,paySalary的请求将是员工ID的列表。服务器将通过一条消息流做出响应,告知是否已向员工支付薪水。

为服务器创建虚拟数据

创建一个名为data.js的文件,并将以下代码复制到其中。

//Hardcode some data for employees
let employees = [{
    id: 1,
    email: "abcd@abcd.com",
    firstName: "First1",
    lastName: "Last1"   
},
{
    id: 2,
    email: "xyz@xyz.com",
    firstName: "First2",
    lastName: "Last2"   
},
{
    id: 3,
    email: "temp@temp.com",
    firstName: "First3",
    lastName: "Last3"   
},
];

exports.employees = employees;

我们将其用作服务器的数据源。

创建Server

创建一个名为server.js的文件。将以下代码复制到server.js中

const PROTO_PATH = __dirname + '/proto/employee.proto';

const grpc = require('grpc');
const protoLoader = require('@grpc/proto-loader');


let packageDefinition = protoLoader.loadSync(
  PROTO_PATH,
  {
    keepCase: true,
    longs: String,
    enums: String,
    defaults: true,
    oneofs: true
  });
let employee_proto = grpc.loadPackageDefinition(packageDefinition)

接下来,将以下代码片段添加到server.js中

let { paySalary } = require('./pay_salary.js');

function main() {
  let server = new grpc.Server();
  server.addService(employee_proto.Employee.service, 
    { paySalary: paySalary }
  );
  server.bind('0.0.0.0:4500', grpc.ServerCredentials.createInsecure());
  server.start();
}

main();

在上面的脚本中,我们将启动GRPC Server并将Employee Service和paySalary实现一起添加到其中。

但是paySalary函数在pay

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值