2014-09-01 7 views
5

का उपयोग कर टीसीपी शून्य प्रतिलिपि मैं बूस्ट का उपयोग कर टीसीपी शून्य प्रति को कार्यान्वित करने की कोशिश कर रहा हूं लेकिन मुझे Google पर कुछ भी नहीं मिल रहा है। मेरा सवाल है कि बूस्ट लाइब्रेरीज़ का उपयोग करके शून्य प्रतिलिपि करना संभव है और यदि ऐसा है तो कृपया मुझे कुछ उदाहरण भेजें या कुछ लिंक।बूस्ट

+3

'boost :: asio' शून्य प्रतिलिपि है जिसमें यह आपके द्वारा पारित बफर की प्रतिलिपि नहीं करेगा। हालांकि क्या टीसीपी स्टैक के माध्यम से शून्य प्रति ऑपरेशन का उपयोग किया जाएगा - यह एक अलग मुद्दा है .. – Nim

उत्तर

6

आप Yandex लोगों द्वारा इस BoostCon बात देख सकते हैं: The Optimization of a Boost.Asio-based Networking Server

मेरे आंत महसूस कहते हैं कि वे (Yandex लोग) इस overengineered (काफ़ी ...)। मैं कहूंगा कि आवश्यक समाधान केवल प्री-आवंटित फिक्स्ड-बफर (शायद प्रति-थ्रेड) का उपयोग करके झूठ बोलता है और एसिओ से म्यूटेबलबफररक्वेंस अवधारणा का उपयोग उन्हें एक साथ चिपकाने के लिए करता है।

इस दृष्टिकोण को Scatter-Gather के रूप में जाना जाता है और केवल संक्षेप में एएसओ दस्तावेज़ों में वर्णित है। यहां एक प्रासंगिक उदाहरण हो सकता है: http://www.boost.org/doc/libs/1_56_0/doc/html/boost_asio/examples/cpp11_examples.html#boost_asio.examples.cpp11_examples.buffers

जैसा कि @Nim पहले से ही टिप्पणी करता है, डिफ़ॉल्ट रूप से असियो "शून्य-प्रति" मोड में काम करता है (क्योंकि यह कभी भी बफर का मालिक नहीं है, न ही कॉलर की ओर से आवंटित करता है)। तो यह वास्तव में काम करने के लिए यह बहुत आसान होना चाहिए। बेशक, क्या कर्नेल/libc फ़ंक्शन शून्य-प्रतिलिपि फ़ैशन में कार्यान्वित किए जाते हैं, केवल ओएस/प्लेटफ़ॉर्म पर निर्भर करता है।