RouteChat example这是一个双向rpc,似乎是在write上缓冲消息。有没有办法在没有缓冲的情况下立即强制写入传出流?
答案 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();
});