我在使用 NodeJS 编写的轻量级 gRPC 服务器时遇到问题。我在这里引用文档。我已经能够编译代表消息和服务的 proto 文件,并且已经成功地建立了一个带有服务器端流方法的 gRPC 服务器,我可以通过BloomRPC触发。
我有一个名为 proto 的消息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 调用),但同时收到最后 59 个结果只有在服务器执行之后call.end()
。没有错误,我在客户端收到的包裹对象是准确的并且格式正确,它们只是按照描述进行批处理。
如何实时实现我的包裹源源不断?这可能吗?我看过但不能确定 - gRPC 服务器端流默认情况下是否具有批处理行为?我已尽我所能理解 gRPC 文档,但我不知道我是否只是试图强制 gRPC 服务器端流做一些他们不打算做的事情。感谢您的帮助,如果我可以提供更多信息,请告诉我,因为这是我的第一个与 gRPC 相关的 SO 问题,我可能错过了一些相关信息。