2010-04-15 14 views
7

मुझे आश्चर्य है कि यह संभव है, और यदि ऐसा है, तो कोई एक पर्ल स्क्रिप्ट बना सकता है जो लगातार फ़ाइल/डीबी पर नज़र रखता है, और फिर फ़ाइल बदलता है तो पाठ प्रसंस्करण करने के लिए एक सबराउटिन को कॉल करें। मुझे पूरा यकीन है कि सॉकेट का उपयोग करना संभव होगा, लेकिन इसे किसी साझा होस्ट पर चल रहे किसी साइट पर वेबचैट एप्लिकेशन के लिए उपयोग करने की आवश्यकता है, और मुझे यकीन नहीं है कि इस पर सॉकेट की अनुमति होगी।मैं पर्ल में एक फ़ाइल की अतुल्यकालिक निगरानी कैसे कर सकता हूं?

मूल विचार है:

  • एक सबरूटीन
  • एक चैट फ़ाइल/डेटाबेस
  • जब फ़ाइल नया संदेश के साथ अद्यतन किया जाता है के लिए एक श्रोता बनाने के लिए, फोन कहा जाता सबरूटीन नया भेज देंगे प्रदर्शित होने के लिए ब्राउज़र पर वापस संदेश

अग्रिम धन्यवाद।

+0

यह इतना कठिन नहीं लगता है, बस '-M' के साथ प्रत्येक कुछ सेकंड में फ़ाइल को मतदान करें। –

+0

केवल एक चीज है, फ़ाइल को मतदान करने से प्रत्येक कुछ सेकंड सर्वर/बैंडविड्थ को अधिभारित कर सकते हैं। हालांकि, अगर इसके टाइमस्टैम्प की निगरानी करने के लिए कोई तरीका है, तो इसमें बहुत अधिक संसाधन नहीं लगेगा, मुझे सोचना चाहिए। – Hussain

उत्तर

8

कई ऑपरेटिंग सिस्टम ऐसी सेवा चलाते हैं जो एप्लिकेशन या फ़ाइल को अपडेट होने पर अधिसूचित होने के अनुरोध को पंजीकृत करने की अनुमति देता है। इसे आमतौर पर File Alteration Monitor कहा जाता है। उपलब्ध कुछ सिस्टम के लिए जुड़े विकिपीडिया पेज देखें। हालिया लिनक्स सिस्टम इनोटिफी का उपयोग करते हैं, पहले डॉटोटिफ़ या गैमिन का उपयोग किया जाता था। ओएस एक्स FSEvents का उपयोग करता है। विंडोज़ की एक समान प्रणाली है। मुझे किसी भी मॉड्यूल या तंत्र के बारे में पता नहीं है जो इन सभी प्रणालियों के लिए क्रॉस प्लेटफार्म काम करता है, लेकिन सीपीएएन पर उपलब्ध विशिष्ट मॉड्यूल हैं, जैसे कि SGI::FAM और File::Tail::FAM

+0

हम्म, फ़ाइल :: पूंछ :: एफएएम लगता है कि मैं क्या देख रहा हूं, मैं इसे देख रहा हूं। धन्यवाद। – Hussain

+3

[फ़ाइल :: ChangeNotify] (http://search.cpan.org/perldoc/File::ChangeNotify) इनमें से एक सामान्य उद्देश्य क्रॉस-प्लेटफ़ॉर्म होने की उम्मीद है, लेकिन अभी तक केवल इनोटिफ़ाई के लिए बैकएंड है, बीएसडी क्यूक्यूयू, और फॉलबैक मतदान विधि ('stat' सभी फाइलें और समय-समय पर डीआईआर)। नहीं Win32, कोई एफएएम नहीं। :( – hobbs

1

मैं इसे एक क्रॉन नौकरी और एक मेकफ़ाइल के साथ करूँगा जिसने पर्ल स्क्रिप्ट का आह्वान किया था। आसान बात यह है कि आप पर्ल स्क्रिप्ट के एटिम को स्वचालित रूप से टाइमस्टैम्प के रूप में तुलना करने के लिए प्राप्त करते हैं, क्योंकि स्क्रिप्ट के एनीम को लागू होने पर अपडेट किया जाता है।

+0

यह प्रतीत होता है, लेकिन हां, साइट एक साझा मेजबान पर है। – Hussain

1
use POE qw(Wheel::FollowTail); 
POE::Session->create(
    inline_states => { 
     _start => sub { 
     $_[HEAP]{tailor} = POE::Wheel::FollowTail->new(
      Filename => "/var/log/thttpd.log", 
      InputEvent => "got_log_line", 
      ResetEvent => "got_log_rollover", 
     ); 
     }, 
     got_log_line => sub { 
     #print "Log: $_[ARG0]\n"; 
     parseline($_[ARG0]); 
     }, 
     got_log_rollover => sub { 
     #print "Log rolled over.\n"; 
     }, 
    } 
); 

POE::Kernel->run(); 
exit; 

#parseline()...etc. 
+0

बस सोच रहा है, क्या यह मॉड्यूल मानक पर्ल इंस्टाल में शामिल है, या यह सीपीएएन से है? – Hussain

+0

मॉड्यूल सीपीएएन, http: // खोज के माध्यम से उपलब्ध है .cpan.org/perldoc? पीओई – slm

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

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