2011-03-22 2 views
17

API docs for Node 0.4.3 के अनुसार, fs.watchFile(filename, [options], listener) समारोह filename पर परिवर्तन के लिए एक नियमित कि होगानोड.जेएस: "fs.watchFile" कैसे काम करता है?

घड़ी शुरू होता है। callback श्रोता को प्रत्येक बार फ़ाइल तक पहुंचने के लिए बुलाया जाएगा।

यह भी कहते हैं

options अगर प्रदान की दो सदस्यों को एक बूलियन, persistent युक्त एक वस्तु, और interval, मिलीसेकेंड में एक मतदान मूल्य होना चाहिए

कौन सा है कि यह होगा इंगित करता है अंतराल में क्या है इसके आधार पर हर बार जांचें। लेकिन यह भी कहते हैं कि

डिफ़ॉल्ट { persistent: true, interval: 0 } है।

तो क्या इसका मतलब यह है कि फ़ाइल समय बदल गया है या नहीं, यह देखने के लिए हर मिलीसेकंड की जांच होगी? क्या यह ओएस स्तर की घटनाओं के लिए सुनता है? वह कैसे काम करता है?

+1

मुझे लगता है कि यह http://stackoverflow.com/questions/4482352/node-js-fs-watchfile-persistent-watch-mechanics –

+0

का डुप्लिकेट है tjameson का उत्तर देखें: हालांकि यह एक डुप्लिकेट हो सकता है, उत्तर प्रदान किया गया उस पुराने प्रश्न में पुराना है। मुझे लगता है कि 2013 तक और भी आधुनिक समाधान बहुत अधिक हैं। –

+0

यह ध्यान देने योग्य है कि नोड v6 में डिफ़ॉल्ट '{निरंतर: सत्य, अंतराल: 5007} 'है। 0 का अंतराल कोई तार्किक अर्थ नहीं बनाता है।ऐसा लगता है कि सवाल पूछे जाने पर यह सच था, लेकिन [सी स्रोत में वर्तमान कार्यान्वयन] (https://github.com/nodejs/node/blob/db1087c9757c31a82c50a1eba368d8cba95b57d0/deps/uv/src/ fs-poll.C# L77) 0 से 1 में बदलता है: 'ctx-> अंतराल = अंतराल? अंतराल: 1; '। – Nateowami

उत्तर

12

हां, cpedros सही है, यह एक डुप्लिकेट प्रतीत होता है। मुझे लगता है कि मैं इस पर कुछ और प्रकाश डाल सकता हूं।

प्रत्येक ओएस की अपनी फ़ाइल परिवर्तन घटना होती है जिसे निकाल दिया जाता है। लिनक्स पर, यह मैक पर है (यह dnotify करने के लिए प्रयोग किया जाता है), यह fsevents है, और विंडोज पर यह FileSystemWatcher है। मुझे यकीन नहीं है कि अंतर्निहित कोड प्रत्येक मामले को संभालता है, लेकिन यह सामान्य विचार है।

यदि आप सिर्फ लिनक्स पर एक फ़ाइल देखना चाहते हैं, तो मैं node-inotify-plus-plus की अनुशंसा करता हूं। यदि आप निर्देशिका देखना चाहते हैं, तो node-walk के साथ inotify-plus-plus का उपयोग करें। मैंने इसे कार्यान्वित किया है और यह एक आकर्षण की तरह काम करता है।

यदि आप रुचि रखते हैं तो मैं कुछ कोड पोस्ट कर सकता हूं। नोड-इनोटिफी-प्लस-प्लस के पीछे की सुंदरता यह है कि यह गूढ़ता की अधिकतर नीचता को सारणीबद्ध करती है और फ़ाइल पर विशिष्ट घटनाओं को सुनने के लिए एक सहज ज्ञान युक्त API प्रदान करती है।

संपादित करें: इसका उपयोग कई फाइलों को देखने के लिए नहीं किया जाना चाहिए। मेरे सिस्टम पर, अधिकतम 8192 है। आपका अधिकतम cat /proc/sys/fs/inotify/max_user_watches का उपयोग करके पाया जा सकता है। इसका उपयोग केवल परिवर्तनों के लिए निर्देशिका देखने के लिए किया जा सकता है और फिर वहां से अलग-अलग फाइलों को समझने के लिए उपयोग किया जा सकता है। एक संशोधित घटना आग लग जाएगी यदि उस निर्देशिका के तहत सीधे एक फ़ाइल संशोधित की जाती है।

संपादित करें: फ़ाइलों को देखने के लिए धन्यवाद @ guiomie अब विंडोज पर पूरी तरह से समर्थित है। मुझे लगता है कि यह v0.6.x रिलीज के साथ है।

+0

यह विंडोज पर सिग्विन (यूनिक्स एमुलेटर) पर परीक्षण किया जा रहा है, और अंत में सोलारिस में इसका उपयोग किया जाएगा। –

+1

Node.js केवल लिनक्स पर विश्वास करता है मेरा मानना ​​है, इसलिए शायद यह किसी प्रकार का मतदान कर रहा है जहां inotify समर्थित नहीं है। – tjameson

+0

@tjameson: क्या आपका मतलब है कि ** फ़ाइल-सिस्टम सुनना ** केवल लिनक्स पर समर्थित है? [स्थापना निर्देश] (https://github.com/joyent/node/wiki/Installation) कहता है कि * "लिनक्स, मैकिंटोश, और सोलारिस" पर बॉक्स से बाहर निकलना चाहिए "। जो यह इंगित करता है ** मैक, सोलारिस पर ** समर्थित है **। शायद आपको ** रीफ्रेज करना चाहिए? ** –

3

tjameson के शानदार उत्तर पर विस्तार करने के लिए, आप watchr का उपयोग नोड बनाम और ओएस अंतर अंतर के बीच एपीआई को सामान्य करने के लिए कर सकते हैं। यह केवल change के बजाय unlink और new के लिए ईवेंट प्रदान करता है, साथ ही निर्देशिका वृक्ष देखने के लिए समर्थन भी जोड़ता है।

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