当前位置: 首页 > news >正文

NodeJS GRPC简单的例子

1. 定义 .proto 文件

首先,创建一个 .proto 文件,定义服务和消息:

syntax = "proto3";package helloworld;service Greeter {rpc SayHello (HelloRequest) returns (HelloReply) {}rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}message HelloRequest {string name = 1;
}message HelloReply {string message = 1;
}

### 2. 实现服务器创建 `greeter_server.js` 文件,包含服务的实现:```javascript
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
const packageDefinition = protoLoader.loadSync('helloworld.proto', {keepCase: true,longs: String,enums: String,defaults: true,oneofs: true
});
const helloProto = grpc.loadPackageDefinition(packageDefinition).helloworld;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() {const server = new grpc.Server();server.addService(helloProto.Greeter.service, { sayHello: sayHello, sayHelloAgain: sayHelloAgain });server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => {server.start();});
}main();

3. 实现客户端

创建 greeter_client.js 文件,包含客户端的实现:

const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
const packageDefinition = protoLoader.loadSync('helloworld.proto', {keepCase: true,longs: String,enums: String,defaults: true,oneofs: true
});
const helloProto = grpc.loadPackageDefinition(packageDefinition).helloworld;function main() {const client = new helloProto.Greeter('localhost:50051', grpc.credentials.createInsecure());client.sayHello({ name: 'World' }, (err, response) => {if (err) console.error(err);else console.log('Greeting:', response.message);});client.sayHelloAgain({ name: 'World' }, (err, response) => {if (err) console.error(err);else console.log('Greeting:', response.message);});
}main();

4. 运行服务器和客户端

确保你已经安装了所有必要的依赖:

npm install @grpc/grpc-js @grpc/proto-loader

然后,分别运行服务器和客户端:

node greeter_server.js
node greeter_client.js
http://www.lryc.cn/news/460207.html

相关文章:

  • 无人机之三维航迹规划篇
  • 风格迁移-StyTr 2 : Image Style Transfer with Transformers
  • 上百种【基于YOLOv8/v10/v11的目标检测系统】目录(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)
  • 记录搜罗到的Matlab 对散点进行椭圆拟合
  • 分享我最近使用《柬埔寨语翻译通》App的体验,不会说高棉语也能去柬埔寨旅游,畅通无阻!
  • 文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统、短视频推荐等相关内容
  • redis在项目中运用(基础)
  • libaom 源码分析系列:svc_encoder_rtc.cc 文件
  • MySQL备份和还原,用mysqldump、mysql和source命令来完成
  • MySQL Server、HeidiSQL(MySQL 数据库工具)
  • 矩阵相关算法
  • 微信小程序-封装通用模块
  • Modnet 人像抠图(论文复现)
  • 利用session机制造测试账号,无需前端也可以测试后端接口
  • JAVA_18
  • Linux升级openssl版本
  • 多态对象的存储方案小结
  • Linux 之 nano 编辑器
  • zipkin启动脚本并指定mysql数据存储
  • 超越GPT-4的视觉与文本理解能力,开源多模态模型领跑者 - Molmo
  • 输入输出--I/O流【C++提升】()
  • Maven 中央仓库地址推荐
  • Fastgpt本地化部署 - 以MAC为例
  • SpringBoot框架下购物推荐网站的设计模式与实现
  • Apache Flink 和 Apache Kafka
  • Excel中Ctrl+e的用法
  • 07-Cesium动态处理线条闪烁材质的属性
  • postgresql16分区表解析
  • 文字识别解决方案-OCR识别应用场景解析
  • Qt 每日面试题 -9