gRPC服务器端流:如何无限期继续流?

时间:2020-01-16 16:48:20

标签: javascript node.js protocol-buffers grpc grpc-node

我在NodeJS中编写的轻量级gRPC服务器遇到问题。我正在参考文档here。我已经能够编译代表消息和服务的原型文件,并且已经成功地使用可以通过BloomRPC触发的服务器端流方法站起了gRPC服务器。

我有一个名为parcel的原始消息,其中包含一个字段:parcel_id。我希望此方法每秒流传输一小包数据。我的第一个基本步骤是一个循环,该循环每秒执行一分钟,然后通过call.write(parcel)应用新的包裹。我已经包含了下面的方法,当我通过gRPC调用它时,它的执行没有错误。

/**
 * 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客户端代码 BloomRPC调用),但仅在服务器执行call.end()之后,一次接收最后59个结果全部。没有错误,并且我在客户端上收到的包裹对象准确无误且格式正确,它们只是按照说明进行了批处理。

如何实时获取恒定的包裹流?这可能吗?我查看了但无法确定-默认情况下,gRPC服务器端流是否具有批处理行为?我尽力理解了gRPC文档,但我无法确定我是否我只是简单地试图迫使gRPC服务器端流执行他们不打算做的事情。感谢您的帮助,如果可以提供更多信息,请告诉我,因为这是我第一个与gRPC有关的SO问题,我可能会错过一些相关信息。

0 个答案:

没有答案