Обратите внимание, что это , а не дубликат аналогичный вопрос для 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
. Я не уверен, как включить недавно созданный канал для создания новых клиентов для каждого сервиса. Я не смог найти никаких полезных методов на документах . Буду признателен за любую помощь.
PS В настоящее время я пытаюсь использовать две службы и создать клиент для каждой службы, и эти два клиента совместно используют соединение на одном канале. Можно ли использовать два сервиса и создать одного клиента для обоих сервисов? Может быть, я могу использовать пространства имен пакета .proto в моих интересах здесь? Мой inte rnet поиск фу провалил меня в этом вопросе.