2009-05-04 13 views
9

मैं नेटवर्क सर्वर का निर्माण कर रहा हूं और सर्वर पर बहुत सारे ऐपडोमेन्स शुरू कर रहा हूं जिनके अनुरोध रूट किए गए हैं। प्रसंस्करण के लिए ऐपडोमेन्स में से एक को अनुरोध पेलोड भेजने का सबसे तेज़ तरीका क्या होगा?उसी प्रक्रिया में ऐपडोमेन्स के बीच बड़े बाइट एरे भेजें

  1. सॉकेट से एक बाइट सरणी में पेलोड में पढ़ें और इसे मार्शल करें।
  2. मार्शल नेटवर्क स्ट्रीम (मार्शलबीरफ से विरासत) AppDomain तक।
  3. पेलोड पढ़ें। वस्तुओं में इसे डीकोड करें। मार्शल डीकोडेड ऑब्जेक्ट्स।
  4. बाइट सरणी को स्थानांतरित करने के लिए नामित पाइप का उपयोग करें।
  5. लूपबैक सॉकेट का उपयोग करें।
  6. शायद वास्तविक सॉकेट कनेक्शन मार्शल करने का कोई तरीका है?

डिकोडिंग ज्यादातर अपरिवर्तनीय वस्तुओं है कि पूरा करने के लिए कैसे ग्राहकों का अनुरोध और AppDomain तो एक प्रतिक्रिया और यह मार्शलों वापस मेजबान AppDomain जो यह सॉकेट के माध्यम से वापस भेजता करने के लिए बनाता है निर्धारित किया जाता है बनाता है।

विधि कम CPU पर कम स्मृति पसंद करना चाहिए।

डब्ल्यूसीएफ एक विकल्प नहीं है।

उत्तर

1

टीसीपी बाइनरी रिमोटिंग निश्चित रूप से तेज़ है, मैं कच्चे सॉकेट की तुलना में कितनी तेज़ी से नहीं है जो शायद सबसे तेज़ है, लेकिन एक शाही पीआईए है।

मैंने दो बक्से के बीच HTTP बाइनरी रिमोटिंग का उपयोग करके उत्पादन में 1500 - 2000 रेक प्रति सेकंड चलाया है। उसी बॉक्स पर आपको डेटा को संसाधित करने के लिए सीपीयू चक्रों के आधार पर टीसीपी या नाम पाइप चैनल का उपयोग करके बहुत अधिक प्रदर्शन होना चाहिए।

1

यदि मैं आप थे तो मैं देखता हूं कि Cassini लागू किया गया है। यह बहुत कुछ करता है जो आप करने के बारे में बात कर रहे हैं।

असल में कैसिनी वेबहोस्ट द्वारा सुपरसीड किया गया है जो अंतर्निहित वेबसर्वर है जो अब विजुअल स्टूडियो के साथ जहाज है। अधिक जानकारी के लिए फिल हैक के ब्लॉग पर this post पर एक नज़र डालें।

+0

कैसिनी रिमोट ऐपडोमेन में कनेक्शन के लिए सुनता है। ऐसा लगता है कि ओपी डिफ़ॉल्ट ऐपडोमेन पर सॉकेट पर सुनना चाहता है। –

1

बहुत अच्छा सवाल है। अगर मैं इस समस्या पर आ रहा था तो शायद मैं एक बुफर्ड स्ट्रीम/मेमोरी स्ट्रीम का उपयोग करता हूं और एपडोमेन में स्ट्रीम को मार्शल करता हूं जो ऑब्जेक्ट को कम करने के लिए ऑब्जेक्ट का उपभोग करता है या एक अलग ऐपडोमेन में बनाए गए कई ऑब्जेक्ट ग्राफ़ को क्रमबद्ध करता है।

लेकिन तब फिर से, यह लगता है कि आप लगभग पूरी तरह से आईआईएस की कार्यक्षमता को डुप्लिकेट कर रहे हैं, इसलिए मैं System.Web.Hosting नेम स्पेस में लगेगा/परावर्तक और देखते हैं कि वे इसे और उनके WorkerThreadPool आदि संभाल ....

1

6। क्या वास्तविक सॉकेट कनेक्शन मार्शल करने का कोई तरीका है?

6-वें आईएमओ सबसे अच्छा विकल्प है। प्रक्रिया परिप्रेक्ष्य से सॉकेट सिर्फ एक हैंडल है। AppDomains एकल प्रक्रिया में रहते हैं। इसका मतलब है कि एपडोमेन सॉकेट हैंडल का आदान-प्रदान कर सकते हैं।

यदि सॉकेट मार्शलिंग काम नहीं कर रहा है, तो आप अन्य एपडोमेन में सॉकेट को पुन: प्रयास करने का प्रयास कर सकते हैं। ऐसा करने के लिए आप DuplicateAndClose का उपयोग कर सकते हैं।

यदि यह काम नहीं करेगा, तो आपको सर्वोत्तम डेटा स्थानांतरण विधि चुनने के लिए कुछ परफॉर्मेंस परीक्षण करना चाहिए। (मैं नामित पाइप या यादगार मैप की गई फाइलों का चयन करूंगा)

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