पर लिख रहा है मैं सॉकेट कनेक्शन में डेटा भेजने के लिए process-send-string
का उपयोग कर रहा हूं, लेकिन मैं इस फ़ंक्शन के प्रभाव से संतुष्ट नहीं हूं। असल में, (process-send-string "foo")
को कॉल करने से "bar"
और फिर "foo"
भेजना समाप्त हो सकता है, जैसा कि नीचे बताया गया है। है, जो टाइमर चला सकते हैं, जो बारी में process-send-string
कॉल कर सकते हैं, और कोई आदेश इस तरह के नेस्टेड कॉल के बीच लागू की जाती है (यहां तक कि वास्तव में कुछ भी लिखने से पहले)परमाणु रूप से एक सॉकेट
के रूप में Emacs देखरेख से बताया, process-send-string
की सी कोड एक समारोह wait_reading_process_output
कहता है।
यह यह लगभग असंभव है जो हुक अनियंत्रित समय पर बुलाया द्वारा इस्तेमाल किया जा करने का इरादा है एक RPC प्रोटोकॉल लागू करने में आता है। तो मेरा सवाल यह है कि, हम इस उद्देश्य के लिए आदिम, "सिंक्रनाइज़" लेखन आदिम कैसे प्राप्त कर सकते हैं?
क्या आपने वास्तव में उस प्रभाव का अनुभव किया है? Emacs के स्रोत कोड पर एक नज़र रखने के बाद, ऐसा लगता है कि आपके द्वारा वर्णित मामला तब उत्पन्न हो सकता है जब डेटा को एक बैच में सॉकेट में नहीं लिखा जा सकता है, लेकिन 'sendto' पर एकाधिक कॉल की आवश्यकता होती है। इन कॉलों में से प्रत्येक के बाद, 'wait_reading_process_output' को कीबोर्ड ईवेंट और रीडाइस्प्ले को संभालने के लिए कहा जाता है। यह मुझे स्पष्ट नहीं है कि उस फ़ंक्शन के भीतर उपयोग किए जाने वाले टाइमर फिर से 'प्रक्रिया-प्रेषण-स्ट्रिंग' कह सकते हैं। – Thomas
हां, मैंने निम्नलिखित देखा है: एम 1, एम 2, एम 3 भेजना, कनेक्शन अंत एम 2, एम 3, एम 1 प्राप्त करता है। –
ध्यान दें कि टीसीपी बाइट उन्मुख है, पैकेट उन्मुख नहीं है। यदि एप्लिकेशन "1234" लिखता है, तो टीसीपी स्टैक इसे किसी संभावित विभाजन में भेज सकता है, उदाहरण के लिए "12", "3", "4"। यदि आप टीसीपी के ऊपर एक प्रोटोकॉल चलाने के लिए चाहते हैं, तो आपको अपने संदेशों की सीमाओं को खोजने के लिए एक तरीका निर्धारित करना होगा, उदाहरण के लिए। एक लंबाई क्षेत्र का उपयोग करके। – bew