首页 > 解决方案 > 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()

标签: node.jsgrpc

解决方案


加载包定义并启动服务器后,您需要将新服务添加到服务器。

// method name could be API, api or aPI dependes on how this was generated
server.addService(hp.versionpb.service, {api  : sayHello});
server.start();

推荐阅读