Обратите внимание, что это не дубликат похожий вопрос для 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 для создания новых клиентов для каждой службы. Я не смог найти полезных методов в документах. Любая помощь будет оценена по достоинству.
P.S. На данный момент я пытаюсь использовать две службы и создать клиента для каждой службы, и эти два клиента используют соединение на одном и том же канале. Можно ли использовать две службы и создать один клиент для обеих служб? Может быть, я могу использовать пространства имен пакетов .proto в своих интересах здесь? Мой поиск в Интернете не помог мне в этом вопросе.