穩(wěn)健的上傳服務(wù)倍试,啥樣的上傳服務(wù)算穩(wěn)健呢?
- 上傳大文件內(nèi)存暴漲,不能算穩(wěn)健吧
- 并發(fā)量賊小柄驻,不能算穩(wěn)健吧
采用流式上傳
nodejs中流真是個好東西,可以平衡生產(chǎn)者(readStream)和消費(fèi)者(writeStream)之間的矛盾焙压,不會因為生產(chǎn)過快鸿脓,導(dǎo)致倉庫積累大量貨物,可以認(rèn)為流中實現(xiàn)了一個中介涯曲,當(dāng)生產(chǎn)到了一定量野哭,即讀入內(nèi)存一定數(shù)據(jù)量,中介告訴生產(chǎn)者幻件,“先暫停生產(chǎn)吧拨黔!倉庫放不下了,東西還沒賣完”傲武。當(dāng)東西賣完了蓉驹,中介通知生產(chǎn)者繼續(xù)生產(chǎn),這樣可以保證產(chǎn)品堆積總量總是不超過一定量揪利,也就程序總是不會超過一定的內(nèi)存占用量态兴。
然而流也有缺點,流占有內(nèi)存少疟位,自然效率不如一股腦兒的有多少內(nèi)存用多少內(nèi)存瞻润。但是這樣任務(wù)就會排隊阻塞,沒有什么并發(fā)可言。
所以绍撞,用nodejs的流實現(xiàn)文件上傳服務(wù)可以做到文章開頭說的穩(wěn)健正勒。
實現(xiàn)上傳
我們知道nodejs中的IO操作是異步的,流也不例外傻铣,而處理異步問題