क्लाइंट/सर्वर संचार एसिंक्रोनस प्रक्रियाओं के माध्यम से संभाला जाता है। इसका मतलब है कि दुर्भाग्यवश, आपके पास कोई फ़ंक्शन "प्रेषण" नहीं है जिसे आप सर्वर पर भेजे जाने के लिए अपना डेटा पास करते हैं और जो आपको सर्वर के उत्तर देता है। इसका कारण यह है कि नेटवर्क संचार धीमा हो सकता है और यह इमाक्स के भीतर अन्य सभी परिचालनों को अवरुद्ध कर देगा जो एकल-थ्रेडेड प्रोग्राम है।
अपने सर्वर पर डेटा भेजने के लिए, (process-send-string process string)
का उपयोग करें। पहला पैरामीटर आपका नेटवर्क कनेक्शन है, जो Emacs एसिंक्रोनस प्रक्रियाओं की तरह व्यवहार करता है। जब से तुम है कि उपप्रक्रिया-वस्तु पहले से ही चर pserv
में जमा हो जाती है, तो आप लिख सकते हैं:
(process-send-string pserv "(my data (can be (in) (list) form))")
सर्वर के लिए एक स्ट्रिंग भेजने के लिए।
सर्वर के उत्तर को पढ़ने के लिए, आप process filter function का उपयोग करते हैं, जो कॉलबैक हैं जो सर्वर आपको जो भी भेजता है उसके साथ बुलाया जाता है। तो अगर आप इस तरह की पहली कॉलबैक फ़ंक्शन परिभाषित करने के लिए है, कहते हैं:
(defun handle-server-reply (process content)
"Gets invoked whenever the server sends data to the client."
...)
इस समारोह दो तर्क, नेटवर्क प्रक्रिया और सामग्री डेटा सर्वर भेजता है लेता है। हालांकि इसके लिए एक मुश्किल बिंदु है: सर्वर का उत्तर उप-सामग्री में विभाजित किया जा सकता है। यही है, जब handle-server-reply
कहा जाता है, content
तर्क में केवल सर्वर उत्तर के कुछ भाग हो सकते हैं। इसे बाद में और सामग्री के साथ फिर से बुलाया जा सकता है। तो सुनिश्चित करें कि आप इसे सही तरीके से संभाल लें।
एक कॉलबैक, उपयोग के रूप में अपने समारोह की घोषणा करने के लिए:
(set-process-filter pserv 'handle-server-reply)
हमेशा की तरह, वर्ण एन्कोडिंग एक pita हो सकता है, तो निम्न दो कार्यों पर गौर और तय करें कि आप उन्हें जरूरत हो सकती है:
(set-process-filter-multibyte pserv t)
(set-process-coding-system pserv 'utf-8 'utf-8)
प्रक्रिया फ़िल्टर फ़ंक्शन निर्दिष्ट करने से पहले सुनिश्चित करें।
उदाहरण के लिए, कनेक्शन को अप्रत्याशित रूप से बंद होने वाले मामलों को संभालने के लिए, आप अपने नेटवर्क कनेक्शन की स्थिति का सर्वेक्षण करने में रुचि भी ले सकते हैं। उस के लिए आप का उपयोग sentinel functions तथाकथित, कॉलबैक का एक और प्रकार जिसके माध्यम से आप प्रक्रिया की स्थिति के परिवर्तन के बारे में सूचित कर सकते हैं:
(set-process-sentinel pserv 'sentinel-function)
(defun sentinel-function (process event)
"Gets called when the status of the network connection changes."
...)
event
पैरामीटर जिस तरह कनेक्शन स्थिति बदल के बारे में जानकारी शामिल है।
मुझे लगता है कि Emacs process documentation पहले बताया गया है। यह निश्चित रूप से पढ़ने लायक है।
धन्यवाद थॉमस, एक बहुत विस्तृत और सहायक उत्तर! – Thorsten
जो मैनुअल से व्यावहारिक रूप से कॉपी किया गया है। मैनुअल बहुत अच्छा है। आपको इसे पढ़ना चाहिए। –
@nicferrier मैं सहमत हूं, यही कारण है कि मेरे उत्तर में मैन्युअल के कई लिंक हैं। – Thomas