如何在grpc双向rpc中发送消息而不从grpc节点客户端缓冲

时间:2017-06-07 21:36:15

标签: node.js grpc

RouteChat example这是一个双向rpc,似乎是在write上缓冲消息。有没有办法在没有缓冲的情况下立即强制写入传出流?

1 个答案:

答案 0 :(得分:1)

您看到此缓冲行为的原因是因为写入实际上是异步完成的,因此服务器代码需要定期允许在写入之间发生其他异步操作,以确保它们在计算后立即发送。您可以利用write的可选回调参数在发送最后一条消息后立即发送每条消息。该示例中的代码可以使用async.each编写:

async.each(notes, function(note, next) {
  console.log('Sending message "' + note.message + '" at ' +
      note.location.latitude + ', ' + note.location.longitude);
  var noteMsg = new messages.RouteNote();
  noteMsg.setMessage(note.message);
  var location = new messages.Point();
  location.setLatitude(note.location.latitude);
  location.setLongitude(note.location.longitude);
  noteMsg.setLocation(location);
  // Note the use of the next callback here
  call.write(noteMsg, next);
}, function() {
  // End the stream after all messages have been sent
  call.end();
});