请注意,这不是go 的类似问题的重复,因为它使用grpc-node
. 由于某种原因,API 似乎存在差异
我执行创建 APIPackageDefinitions 和 APIPackagePbjects 的标准过程,并分别从每个客户端创建两个单独的客户端。
let grpc = require('grpc')
let protoLoader = require('@grpc/proto-loader')
async function createGrcpConnection() {
const HOST = 'localhost'
const PORT = '50053'
const PORT2 = '50054'
let physicalProjectAPIPackageDefinition = await protoLoader.load(
'./physical_project_api.proto',protoLoaderOptions
)
let configAPIPackageDefinition = await protoLoader.load(
'./config_api.proto', protoLoaderOptions
)
let physicalProjectAPIPackageObject = grpc.loadPackageDefinition(
physicalProjectAPIPackageDefinition
).package.v1
let configAPIPackageObject = grpc.loadPackageDefinition(
configAPIPackageDefinition
).package.v1
let grpcClient1 = physicalProjectAPIPackageObject.PhysicalProjectAPI(
`${HOST}:${PORT}`,
grpc.credentials.createInsecure()
)
let grpcClient2 = configAPIPackageObject.ConfigAPI(
`${HOST}:${PORT2}`,
grpc.credentials.createInsecure()
)
return { grpcClient1, grpcClient2 }
}
我正在寻找一种方法来创建两个共享相同连接的客户端。我认为我通过创建一个新语句Channel
并将最后两个let
语句替换为接近解决方案
let cc = new grpc.Channel(
`${HOST}:${PORT}`,
grpc.credentials.createInsecure()
)
let grpcClient1 = physicalProjectAPIPackageObject.PhysicalProjectAPI(cc)
let grpcClient2 = configAPIPackageObject.ConfigAPI(cc)
但是,我收到了一个TypeError: Channel's first argument (address) must be a string
. 我不确定如何合并新实例化的 Channel 来为每个服务创建新客户端。我在docs上找不到任何有用的方法。任何帮助,将不胜感激。
PS 目前我正在尝试使用两个服务,并为每个服务创建一个客户端,并让这两个客户端在同一通道上共享一个连接。是否可以使用两个服务,并为这两个服务创建一个客户端?也许我可以在这里使用 .proto 包命名空间来发挥我的优势?我的互联网搜索让我在这个问题上失败了。