2014-06-28 11 views
7

मैं एक विशुद्ध रूप से तुल्यकालिक, एकल थ्रेड किए कमांड लाइन Node.js में कार्यक्रम है, जो एक भी बाइनरी फ़ाइल है, जिसके लिए मैं WriteStream उपयोग कर रहा हूँ लिखने के लिए की जरूरत है लिख रहा हूँ। मेरे उपयोग पैटर्न की तर्ज पर है:Node.js WriteStream तुल्यकालिक

var stream = fs.createWriteStream(file) 
stream.write(buf1) 
stream.write(buf2) 

यह काम करने के लिए लगता है, लेकिन प्रलेखन यह अतुल्यकालिक है कहते हैं और मुझे यकीन है कि मैं कोड है कि समय के 99% काम करता है लिख नहीं कर रहा हूँ बनाना चाहते हैं। मुझे परवाह नहीं है वास्तव में जब डेटा के रूप में लंबे समय तक लिखा हो जाता है के रूप में यह निर्दिष्ट क्रम में लिखा गया था और कोई बाद में की तुलना में जब कार्यक्रम बाहर निकलता है, और डेटा की मात्रा छोटा है तो गति और स्मृति की खपत मुद्दे नहीं हैं है।

मैंने stream.end() का उल्लेख देखा है, लेकिन ऐसा लगता है कि इसके बिना काम करना प्रतीत होता है और मैंने यह भी सुझाव देखा है कि अगर आप कॉलबैक का उपयोग नहीं कर रहे हैं तो इसे कॉल करना वास्तव में एक बुरा विचार हो सकता है क्योंकि यह सब से पहले कॉल हो सकता है डेटा लिखा है।

(यह देखते हुए कि मैं चाहता हूँ विशुद्ध रूप से तुल्यकालिक) मेरे दृष्टिकोण सही है या क्या मैं के लिए बाहर देखने की जरूरत है?

+1

मुझे पूरी तरह से यकीन नहीं है कि यह आपके उपयोग के मामले में फिट होगा (और यह पहचानें कि यह काफी नहीं हो सकता है खोज रहे हैं) लेकिन क्या आपने सिंक्रोनस विकल्प के रूप में सिर्फ 'fs.write' का उपयोग करने पर विचार किया है? http://nodejs.org/api/fs.html#fs_fs_write_fd_buffer_offset_length_position_callback – imjared

+0

अच्छा प्रश्न @imjared! इसका सिंक्रोनस संस्करण नौकरी करना प्रतीत होता है। दोनों के बीच क्या अंतर है? या इसके अस्तित्व को देखते हुए, एक और तरीका डालें, WriteStream के अस्तित्व का क्या कारण है? क्या लिखितस्ट्रीम मुख्य रूप से पाठ लिखने के लिए लक्षित है? – rwallace

+1

पूरी तरह से ईमानदार होने के लिए मुझे धाराओं की सबसे अच्छी समझ नहीं है लेकिन जब भी मुझे कुछ लिखने के लिए एक तुल्यकालिक दृष्टिकोण की आवश्यकता होती है। http://stackoverflow.com/a/8770026/628699 – imjared

उत्तर

4

आप ऐसा कर सकते हैं, समस्या सिर्फ अगर आप एक ही पथ के लिए दो या अधिक समवर्ती स्ट्रीम बनाने के हो सकते हैं: विभिन्न धाराओं से लेखन के आदेश अपरिभाषित कर दिया जाएगा। वैसे, नोड में एक सिंक्रोनस एफएस लिखने के लिए स्ट्रीम कार्यान्वयन है: fs.SyncWriteStream। यह एक तरह का निजी है और fd को तर्क के रूप में आवश्यक है, लेकिन यदि आप वास्तव में इसे चाहते हैं ...

+2

आपको 'fs.SyncWriteStream' का उपयोग करने की आवश्यकता नहीं है। बस 'fd = openSync' करें और फिर उस' fd' का उपयोग करके 'readSync' करें। – Pacerier

+2

एपीआई क्या है? मैं इस समारोह को कैसे शुरू कर सकता हूं। एक उदाहरण बहुत उपयोगी होगा! –

संबंधित मुद्दे