У меня проблема с облегченным сервером gRP C, на котором я пишу NodeJS. Я ссылаюсь на документацию здесь . Я смог скомпилировать свои прототипы, представляющие сообщения и сервисы, и успешно установил сервер gRP C с потоковым методом, который я могу запустить с помощью BloomRP C.
У меня есть прото-сообщение с именем parcel
, в котором есть одно поле: parcel_id
. Я хочу, чтобы этот метод передавал посылку данных каждую секунду. Мой первый элементарный проход на этом этапе был oop, который выполняется каждую секунду в течение минуты и применяет новую посылку через call.write(parcel)
. Я включил метод ниже, он выполняется без ошибок, когда я вызываю его через gRP C.
/**
* Implements the updateParcel RPC method.
* Feeds new parcel to the passed in "call" param
* until the simulation is stopped.
*/
function updateParcels(call) {
console.log("Parcels requested...");
// Continuously stream parcel protos to requester
let i = 0;
let id = 0;
while(i < 60){
// Create dummy parcel
let parcel = new messages.Parcel();
parcel.setParcelId(id);
id++;// Increment id
// Write parcel to call object
console.log("Sending parcel...");
call.write(parcel);
// Sleep for a second (1000 millis) before repeating
sleep(1000);
}
call.end();
}
Моя проблема в том, что, хотя я могу вызывать свои методы и получать результаты, поведение таково, что я получаю первый результат немедленно на клиенте (для обоих NodeJS клиентский код и (BloomRP C вызывает), но получают последние 59 результатов сразу только после того, как сервер выполнит call.end()
. Нет ошибок, и объекты посылки, которые я получаю на клиенте, точны и правильно отформатированы, они просто упакованы, как описано.
Как я могу получить постоянный поток своих посылок в режиме реального времени? Это возможно? Я посмотрел, но точно не могу сказать - у серверных потоков gRP C есть режим пакетной обработки по умолчанию? Я изо всех сил пытался понять документацию gRP C, но я могу ' не могу сказать, пытаюсь ли я просто заставить gRP C серверные потоки делать то, что они не были предназначены. Спасибо за любую помощь, и дайте мне знать, если я смогу предоставить больше информации, так как это мой первый вопрос SO, связанный с gRP C, и я, возможно, пропустил некоторую соответствующую информацию.