node.js - Node.js gRPC 与工具 proto 文件的连接
问题描述
我正在尝试使用在我的机器上运行的名为 Pachyderm 的工具创建 Node.js gRPC 连接。我为该工具生成了一个 .proto 文件,该文件将简单地显示该工具的版本。我已经为它生成了一个 server.js,但是,它没有通过连接到工具的相应 IP:port 来成功提取工具版本。
如果您能帮我解决这个问题,我将不胜感激。
.proto 文件
syntax = "proto3";
import "google/protobuf/empty.proto";
package versionpb;
option go_package = "github.com/pachyderm/pachyderm/src/client/version/versionpb";
message Version {
uint32 major = 1;
uint32 minor = 2;
uint32 micro = 3;
string additional = 4;
}
service API {
rpc GetVersion(google.protobuf.Empty) returns (Version) {}
}
服务器.js
const path = require('path')
const protoLoader = require('@grpc/proto-loader')
const grpc = require('grpc')
const PROTO_PATH = path.resolve(__dirname, './protos/pach.proto')
const pd = protoLoader.loadSync(PROTO_PATH)
const hp = grpc.loadPackageDefinition(pd).pach
function sayHello (call, fn) {
fn(null, { message: 'The tool version is ' + call.request.name })
}
function main () {
const port = 30650
const server = new grpc.Server()
server.bind(`192.161.5.3:${port}`, grpc.ServerCredentials.createInsecure())
server.start()
console.log(`gRPC server started on port: ${port}`)
}
main()
解决方案
加载包定义并启动服务器后,您需要将新服务添加到服务器。
// method name could be API, api or aPI dependes on how this was generated
server.addService(hp.versionpb.service, {api : sayHello});
server.start();
推荐阅读
- python - 将字典附加到 Dynamodb 中的列表中
- api - 键集和光标分页之间的区别?
- android - 使用 kotlin 自定义日期选择器
- vlookup - 如何查找某个单元格并修改另一个单元格以在原始数组中更新而不重复?
- c++ - 打破 c++ 20 模块依赖
- python - Qt5 - 如何向系统托盘应用程序添加水平子菜单
- python - 圆形区域直方图
- python - 用列表理解划分字符串
- c# - 从 NES CHR 文件(即二进制文件)加载图像并在 Windows 窗体上显示
- asp.net-web-api - 当创建的项目仅对创建者可见时,无法在 sharepoint 2019 中创建警报