2012-04-07 17 views
8

documentation for write() diyor: falsenode.js' yazılabilir akışı ve boşaltma olayı

İade çekirdek tampon dolu olduğunu göstermek için ve veri gelecekte gönderilecektir.

ve drain etkinlik için dokümantasyon

diyor ki: Bir yazma() yönteminin sonra

yanlış döndü, bu olay tekrar yazmaya güvenli olduğunu göstermek için yayılır.

Bu ne anlama geliyor? Tekrar yazabilmem için drain etkinliğini beklemek zorunda mıyım? Yazmaya çalıştığım verilere ne oldu? Bu kayıp mı? drain olayını beklemeden yazdığımda ne olur?

cevap

6

güvenle dönüş değeri hakkında önemsemeden write() çağırabilir. Çekirdek arabelleği doluyken, düğüm herhangi bir yazma çağrısını tamponlayacak ve beklediğiniz gibi sırayla itecektir. Yine yazmadan önce 'drain' olay beklemek değil gereğini yapmak .

İsteğe bağlı olarak, write() dönüş değerini kontrol edip tampon dolu olduğu Akışına yazıyor şeyi uyarabilir. Bu tam olarak Stream#pipe() does.

Yani genellikle sadece Stream#pipe() kullanabilir ve tüm güzellikler sizin için halledilir :) Eğer `process.exit diyoruz ne olur

+1

()' 'res.write' hala kullanıcı ara belleğe iken (yani, çekirdek arabelleği temizlenmez)? Yanıt kayboluyor mu? – Emmett

+0

@Emmett Evet, 'process.exit()' işlevini çağırırsanız, arabelleğe alınmış yazma çağrıları temizlendikten sonra bu veriler kaybolur. – TooTallNate

+1

"Dönüş değeri hakkında bilgi vermeden" yazmak() 'ı çağırmak tamamen güvenli değildir. [Cari docs] (https://nodejs.org/dist/v8.4.0/docs/api/stream.html) de ki: _ "' drene olmayan bir akışta yazma() 'çağıran izin verilir iken, Düğüm maksimum bellek kullanımı gerçekleşene kadar js bile, hangi o. koşulsuz iptal edecek o iptal önce bile, yüksek bellek kullanımı yoksul çöp toplayıcı performansı ve genellikle sisteme geri serbest bırakılmaz yüksek RSS (neden olacaktır işaret bütün yazılı parçalarını tamponlayacaktır bellek artık gerekli değil). "_ Ayrıca bkz: https://stackoverflow.com/q/37579605 – TachyonVortex