2011-10-08 18 views
6

मुझे एक सी ++ सर्वर मिला है जो दर्पण के रूप में कार्य करता है। एक अलग सॉकेट में क्या हो जाता है। अभी, यह सॉकेट को बफर में पढ़ता है और इसे अन्य सॉकेट में लिखता है। मैं थ्रूपुट में सुधार करना चाहता हूं।सॉकेट के बीच पाइप

मेरे पास read stuffsendfile() और splice() है, लेकिन ऐसा लगता है कि यह "फ़ाइल-टू-सॉकेट" स्थानान्तरण तक सीमित है। सॉकेट के बीच शायद एक साधारण pipe() काम करेगा। आप क्या सलाह देते हैं?

एक पोर्टेबल समाधान सही होगा, लेकिन यह ठीक है अगर यह केवल लिनक्स है।

+1

से डेटा पुनः प्राप्त कर सकता है यह कुछ उपयोग हो सकता है http://unix.stackexchange.com/questions/9593/can-splice-tee-be-made-to-work-with-sockets- और न केवल-पाइप – Arunmu

+0

हो सकता है कि आप दोनों सॉकेट के लिए एक ही बंदरगाह का उपयोग कर सकें! – Arunmu

+1

एक और लिंक जो पाइप के माध्यम से डेटा स्थानांतरित करता है :): http://markmail.org/thread/4cils4zyoxtrq3zu – Arunmu

उत्तर

4

आप लिनक्स में नामित पाइप सेट कर सकते हैं। इस से कई प्रक्रियाएं पढ़/लिख सकती हैं। इस लिंक को देखें: http://www.cs.fredonia.edu/zubairi/s2k2/csit431/more_pipes.html

जैसा कि ऊपर बताया गया है नेटकैट का उपयोग करना चाल (http://netcat.sourceforge.net/) करना चाहिए।

+0

के बारे में क्या है (जहां तक ​​मुझे पता है (बीएसडी स्रोत फ़ाइल के अनुसार), 'एनसी' 8192 बाइट्स के बफर का उपयोग करता है, जो इस समय मूल रूप से मेरा समाधान है। –

+0

मैं नामित पाइप का उपयोग करने पर विचार कर सकता हूं और इसे बेंचमार्क कर सकता हूं, लेकिन अगर फीफो फ़ाइल रैम-आधारित है, तो भी मैं नहीं देख सकता कि यह एक साधारण मेमोरी प्रति से तेज़ी से कैसे जा सकता है। –

0

मैं के रूप में अपने टिप्पणी में Ralu ने उल्लेख किया nc(netcat) आदेश की जाँच की और जब पाइप :)

मैं नीचे कमांड का इस्तेमाल किया के साथ प्रयोग किया यह दो सॉकेट के बीच काम करता है:

 

netcat -l 5556 | netcat localhost 5557 
 

मैं करने के लिए डेटा भेजा बंदरगाह 5556 (एक पायथन क्लाइंट) पहले एनसी कमांड द्वारा स्थापित किया गया था और पोर्ट 5557 पर एक सर्वर (छोटा पायथन कोड) सुन रहा था।

मैं बंदरगाह 5557

+0

निश्चित रूप से, लेकिन सवाल यह करने की संभावना के बारे में नहीं है, यह __ttimizing it_ के बारे में है। –

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