स्ट्रैंड के माध्यम से सॉकेट पर async_ * ऑपरेशन कैसे करें? मैंने टाइमर 5 (बूस्ट/असियो उदाहरण) को देखा है, लेकिन वे केवल दिखाते हैं कि उपयोगकर्ता के हैंडलर को कैसे बुलाया जाए। जब मैं multithreaded अनुप्रयोग डेटा में सॉकेट में async_write
दूषित लिखा जा सकता है। और strand
गारंटी देता है कि इनमें से कोई भी हैंडलर एक साथ निष्पादित नहीं करेगा।बूस्ट :: एएसओ सॉकेट async_ * स्ट्रैंड
उत्तर
से Boost.Asio डॉक्स:
io_service :: किनारा वर्ग पोस्ट करने की क्षमता प्रदान करता है और गारंटी नहीं है कि उन लोगों के संचालकों में से कोई भी समवर्ती निष्पादित करेंगे साथ संचालकों प्रेषण।
Boost.Asio उदाहरण में strand
उपयोग के a good example नहीं है।
strand
गारंटी देता है कि आपके हैंडलर निष्पादन को सिंक्रनाइज़ किया जाएगा। इसका मतलब है कि strand
उपयोगी है यदि आपके io_service
एकाधिक धागे से निष्पादित किया गया है। यह आपके कार्यों (हैंडलर) को शेड्यूल करने से संबंधित नहीं है।
strand
एकाधिक सॉकेट को पढ़ने या ओप लिखने में आपकी मदद नहीं कर सकता है, क्योंकि आंतरिक पढ़ने/लिखने के निष्पादन को समवर्ती रूप से नहीं किया जा सकता है, इसलिए केवल एक सक्रिय पढ़ना चाहिए या async op लिखना चाहिए।
reads
के लिए आप पढ़ने के अनुक्रम को शुरू करने के लिए बस async_read
पर कॉल करें और प्राप्त डेटा लेने के बाद इसे अपने पढ़ने वाले हैंडलर से फिर से कॉल करें। वही है जो आप एकल थ्रेडेड वातावरण में करते हैं।
writes
के लिए यदि समवर्ती उत्पादक हैं (यदि एकाधिक धागे सॉकेट पर डेटा लिखने के लिए डेटा प्रदान करते हैं) तो आपको एक समवर्ती कतार की आवश्यकता होती है (उदा। boost circular buffer, "बोल्ड बफर उदाहरण" देखें)। आपका लेखन फ़ंक्शन इस बफर से डेटा लेता है और एसिंक इसे सॉकेट में लिखता है। आपका लेखन हैंडलर आपके लेखन समारोह को आमंत्रित करता है।
जब मैं बहु आवेदन डेटा में सॉकेट से
async_write()
भ्रष्ट लिखा जा सकता है। और स्ट्रैंड गारंटी है कि उनमें से कोई भी हैंडलर एक साथ निष्पादित करेंगे।
यदि एकाधिक धागे को सॉकेट पर डेटा लिखने की आवश्यकता है, तो आपको डेटा का ऑर्डर करना होगा। यह async_write()
documentation में स्पष्ट रूप से स्पष्ट है।
कार्यक्रम सुनिश्चित करना चाहिए कि धारा इस आपरेशन पूरा करता है जब तक (जैसे async_write, धारा के async_write_some समारोह, या किसी अन्य की रचना कार्य है कि राईट प्रदर्शन के रूप में) कोई अन्य लिखने संचालन करता है।
मैं संदेशों के एक निवर्तमान कतार, जो बहुत this question और मेरे answer के समान है बनाए रखने के सुझाव देते हैं।
- 1. बूस्ट एएसओ और वेब सॉकेट?
- 2. बूस्ट एएसओ स्वीकार्य
- 3. बूस्ट एएसओ कॉन्स्टबफररक्वेंस - सी ++ टेम्पलेट्स
- 4. बूस्ट एएसओ और एंडियन
- 5. बूस्ट :: एएसओ यूडीपी प्रसारण
- 6. बूस्ट एएसओ एकल थ्रेडेड प्रदर्शन
- 7. एएसओ
- 8. बूस्ट एएसओ और सी/सी ++
- 9. बूस्ट :: एएसओ, साझा मेमोरी और इंटरप्रोसेस संचार
- 10. बूस्ट एएसओ मल्टीथ्रेडेड टीसीपी सिंक्रोनस सर्वर
- 11. बूस्ट :: एएसओ, थ्रेड पूल और थ्रेड मॉनिटरिंग
- 12. बूस्ट एएसओ में सॉकेट को अवरुद्ध करने पर टाइमआउट कैसे सेट करें?
- 13. बूस्ट एएसओ सॉकेट: हार्ड ड्राइव से फ़ाइल पढ़ने का सबसे तेज़ तरीका?
- 14. बूस्ट :: एएसआई
- 15. सभी हैंडलर को बूस्ट :: एएसओ :: io_service से उन्हें
- 16. बूस्ट। एएसओ दस्तावेज मौजूद नहीं है। इन त्रुटियों का क्या अर्थ है?
- 17. बूस्ट :: Asio: io_service.run() बनाम पोल() या मैं बूस्ट :: एएसओ को मुख्यलोप
- 18. बूस्ट एएसआईयू udp सॉकेट संयुक्त डेटाग्राम
- 19. AF_NETLINK (नेटलिंक) सॉकेट का उपयोग बूस्ट :: एएसआई
- 20. को बढ़ावा देने के दौरान "खराब फ़ाइल डिस्क्रिप्टर" मिला :: एएसओ और बूस्ट :: थ्रेड
- 21. बूस्ट :: सॉकेटकैन
- 22. बढ़ावा देने के लिए कॉल में एएसओ सर्वर लटका है :: सॉकेट
- 23. सी ++, एएसओ को बढ़ावा दें, शून्य समाप्त टर्मिंग स्ट्रिंग प्राप्त करें
- 24. बूस्ट asio udp सॉकेट async_receive_from हैंडलर को कॉल नहीं करता
- 25. "कनेक्शन कम" बूस्ट पर कनेक्ट करें :: asio :: ip :: udp :: सॉकेट
- 26. बूस्ट एएसआईओ टीसीपी सॉकेट उपलब्ध रिपोर्ट्स बाइट्स की गलत संख्या
- 27. टीसीपी सर्वर डब्ल्यू/बूस्ट :: एएसओ, थ्रेड पूल बनाम स्केलेलेस कोरआउट्स की स्केलेबिलिटी
- 28. सामान्य प्रयोजन कार्यों के लिए बूस्ट :: एएसओ थ्रेड पूल का उपयोग
- 29. एक विशिष्ट ईथरनेट इंटरफेस को एएसओ सॉकेट मल्टीकास्ट को बढ़ावा दें
- 30. बूस्ट
आपको विशेष रूप से समस्याएं क्या हैं? एक 'स्ट्रैंड' का उपयोग करते हुए 'स्ट्रैंड' बनाम _not_ का उपयोग करते समय एसिंक ऑपरेशंस को निष्पादित करना काफी अलग नहीं है। बस अपने हैंडलर को स्ट्रैंड में लपेटें। – Chad
यह प्रश्न वर्तमान में phrased के रूप में समझ में नहीं आता है, कृपया इसे संपादित करें और कुछ स्पष्टता जोड़ें। –
यह मेरे लिए एक सही समझ बनाता है। मुझे भी यही तकलीफ़ है। एकाधिक धागे एक कनेक्शन को पढ़ने/लिखने के अनुरोध प्रतिक्रियाओं का उपयोग करने की कोशिश कर रहे हैं और सभी गड़बड़ हो गए हैं। जो मैं प्राप्त करने की कोशिश कर रहा हूं वह एक स्क्वेंशियल रीड अनुरोध है/जो भी प्रक्रिया करने की आवश्यकता है (यहां तक कि एक और अनुरोध/विभिन्न सेवा के प्रति प्रतिक्रिया) और फिर मूल अनुरोधकर्ता को प्रतिक्रिया वापस कर दें। – Roskoto