2009-03-22 22 views
27

मुझे एहसास हुआ है कि अतीत में पूछे गए कई प्रश्न, जैसे this वास्तव में एक और मौलिक प्रश्न के लिए उबालते हैं।नेटवर्क संचार डिजाइन पैटर्न

क्या नेटवर्क संचार के लिए और इसकी प्रकृति, प्रोटोकॉल निर्माण/पार्सिंग के आधार पर कोई प्रसिद्ध डिजाइन पैटर्न हैं? एक Google खोज ने बहुत कुछ नहीं बताया है।

ध्यान दें कि मैं किसी भी समस्या के लिए समाधान की तलाश नहीं कर रहा हूं, मैं नेटवर्क संचार और उनके प्रोटोकॉल से निपटने वाले दस्तावेज डिजाइन पैटर्न की तलाश में हूं।

संपादित करें:

कृपया, विभिन्न कार्यान्वयन विवरण का सुझाव या जब तक कि यह एक डिजाइन पैटर्न से जुड़ा हुआ है विशिष्ट प्रोटोकॉल चर्चा नहीं करते। प्रोटोकॉल डिज़ाइन समस्या नहीं है, यह प्रोटोकॉल बनाने या पार्स करने के लिए डिज़ाइन पैटर्न है जिसे मैं ढूंढ रहा हूं, संचार पैटर्न का उल्लेख न करें।

EDIT2:

मैं इस पर विश्वास करना मुश्किल है कि कोई भी नेटवर्क संचार के लिए किसी भी आम पैटर्न के साथ आ गया लगता है। हां, मुझे पता है "यह निर्भर करता है", लेकिन आप कह सकते हैं कि किसी भी परियोजना के बारे में, फिर भी ऐसे कई पैटर्न हैं जो सामान्य विचारों को कवर करते हैं।

+2

हाय, मैं इसी तरह के प्रश्न पूछने की कोशिश कर रहा था, और मुझे आपका प्रश्न मिला। मैंने कई अनुप्रयोग विकसित किए हैं जहां श्रोता धागा है, और प्रत्येक नोड पर ग्राहक। जैसा कि आपने कहा, विभिन्न अनुप्रयोगों की अलग-अलग ज़रूरतें हो सकती हैं। कुछ को एसीके की आवश्यकता हो सकती है, कुछ डुप्लिकेट संदेश आदि पर भरोसा कर सकते हैं। विकास करते समय, ज्यादातर बार मैं अपने पिछले कोड पर वापस देखता हूं या कुछ करने के सबसे तार्किक तरीके से महसूस करता हूं। यह वास्तव में सहायक होगा, अगर कोई पैटर्न था, तो अनुप्रयोग परत संचार के बारे में बात करते हैं या समाधान खोजने के लिए किसी को मौजूदा प्रोटोकॉल को देखना चाहिए? – Kalp

+0

प्रोक्टर/रिएक्टर पैटर्न भी देखें। उदाहरण के लिए यहां एक लेख दिया गया है: [http://www.artima.com/articles/io_design_patterns.html ](http://www.artima.com/articles/io_design_patterns.html) – alariq

+0

@casperOne - इसका उद्देश्य क्या है एक 3 साल पुराना सवाल बंद कर दिया गया है जिसका पहले से ही उत्तर दिया गया है? –

उत्तर

8

मैं कहूंगा कि उत्तरदायित्व पैटर्न की श्रृंखला नेटवर्क से डेटा भेजने/प्राप्त करने के लिए उपयोगी हो सकती है।

आप क्लाइंट से सर्वर को भेजने के लिए आदेशों की श्रृंखला बनाते हैं। प्रत्येक आदेश को उत्तरदायित्व की श्रृंखला के माध्यम से संसाधित किया जाता है, जिसमें कमांड को सही तरीके से संभालने के लिए जोड़ा गया डेटा होता है।

डेटा पर, भेजने श्रृंखला है कि

 

Command --> Wrap some  --> Encrypt --> Send data 
to send  data around 
       the command 
       (source, extra 
       information if 
       needed) 

डेटा पर दिखाई दे सकता है प्राप्त करते हैं, चेन, समान हो सकता है लेकिन दूसरी तरह के आसपास

 
Receive Data --> Decrypt --> Unwrap extra data --> Execute command 

आप और अधिक के लिए इस लेख की जांच कर सकते जवाबदेही की श्रृंखला के बारे में जानकारी। http://www.vincehuston.org/dp/chain.html

-1

मुझे पैटर्न के बारे में पता नहीं है, लेकिन कुछ "स्पष्ट" चयन बिंदु हैं। सबसे पहले, क्या आप एएसएन .1 का उपयोग करना चाहते हैं या नहीं (यह एक बहुत कुछ प्रभावित करता है)? दूसरा, क्या आप मानव-पठनीय प्रोटोकॉल या बाइनरी चाहते हैं? तीसरा, क्या आप अपने प्रोटोकॉल में कोई सुरक्षा पहलू चाहते हैं?

"ASN.1 का उपयोग करना चाहते हैं" का जवाब नहीं देना प्रोटोकॉल डिज़ाइन प्रश्नों में से कुछ को जवाब देगा।

2

मैं अनुशंसा करता हूं: नेटवर्क प्रोटोकॉल को दूर करें।

पहले निर्णय लें कि उनके बीच कार्यक्षमता, मॉड्यूल और एपीआई क्या हैं। फिर तय करें कि नेटवर्क पर सवारी करने वाला डेटा कौन सा प्रोटोकॉल है।

फिर सावधानीपूर्वक अपने स्वयं के परत में सभी नेटवर्क मुद्दों को समाहित करें ताकि आप बाद में एन्क्रिप्शन, संपीड़न, http ट्रांसपोर्ट (फ़ायरवॉल पास करने के लिए) या जो कुछ भी आप कार्यक्षमता के लिए ऑर्थोगोनल में जोड़ना चाहते हैं उसे लागू कर सकें।

0

मुझे डिजाइन पैटर्न के बारे में पता नहीं है, लेकिन मौजूदा प्रोटोकॉल का शोध शायद एक अच्छा प्रारंभिक बिंदु है, विशेष रूप से "आधुनिक" जिन्हें मानकीकृत किया गया है।

बिटटोरेंट एक बेहद लोकप्रिय विकेन्द्रीकृत प्रोटोकॉल है जिसमें कई एक्सटेंशन हैं।

ओपनएसएसएच एक और अच्छा उम्मीदवार है; यह सुविधा वार्ता, एकाधिक एन्क्रिप्शन प्रकार, और डी/muxing चैनल का समर्थन करता है।

वीओआईपी प्रोटोकॉल अनुप्रयोगों स्ट्रीमिंग के लिए अच्छा कर रहे हैं: आरटीपी और एच .323

नेटवर्क रूटिंग प्रोटोकॉल के रूप में अच्छी तरह से अच्छा कर रहे हैं: BGP (और एक्सटेंशन), ​​एलडीपी, VRRP/कार्प।

11

यह एक बहुत व्यापक सवाल है और इसके उपचार के लिए संभवतः काफी घनी किताब की आवश्यकता होती है।

मैं अपने आप को किसी भी तरह के संसाधन के बारे में पता नहीं है, लेकिन के माध्यम से इस बारे में सोच और विचार क्या एक नेटवर्क संचार पैटर्न अंतरिक्ष के आयाम होगा करने देता है:

कनेक्शन साधन: {कनेक्शन आधारित, संपर्क-रहित}

बातचीत साधन: {तुल्यकालिक, अतुल्यकालिक}

बातचीत जटिलता: {आदेश-प्रतिक्रिया, संवाद}

संदेश प्रपत्र: {freeform धारा, अर्द्ध संरचित ब्लॉक, पूरी तरह से संरचित ब्लॉक} ..?

प्रारंभ करने के लिए एक अच्छी जगह प्रोटोकॉल के टीसीपी/आईपी परिवार को लेना है, उन्हें उपरोक्त स्थान पर मानचित्रित करना है, और उपरोक्त में एक अद्वितीय स्थिति पर कब्जा करने वाले एक या अधिक नमूने के कार्यान्वयन पर एक नज़र डालें प्रोटोकॉल-विशेषताओं पैटर्न अंतरिक्ष। आपके पसंदीदा * निक्स ओएस का स्रोत कोड देखने के लिए एक अच्छी जगह होगी।

पार्सर कार्यान्वयन शायद दो व्यापक श्रेणियों में आ जाएगा: {कमांड-स्विच प्रोसेसिंग, परिमित-राज्य-मशीन}।

पूर्व (स्पष्ट रूप से) दोनों के सरल और संभवतः प्रारंभिक कार्यान्वयन (जब तक कि आपने पहले इस तरह की चीज नहीं की है)।

उत्तरार्द्ध (संभवतः) अधिक मजबूत, कुशल (लोक के संदर्भ में) है, और प्रोटोकॉल में परिवर्तन को अपनाने की अनुमति देगा (यदि यह अभी भी डिज़ाइन परिवर्तन के अधीन है)।

(।। अंतर्निहित (आभासी) ओएस नेटवर्किंग (बेशक) भी बहुत कार्यान्वयन को प्रभावित JVM उदाहरण के लिए सुविधाएं: NIO चयन आधारित चैनल प्रसंस्करण एक FSM के साथ काफी अच्छी तरह से काम करेगा)

आशा है कि मदद करता है ।

-1

अच्छी तरह से इस के माध्यम से चला नहीं है, लेकिन मुझे लगता है कि this अच्छा दस्तावेज़ है:

इसके अलावा

, this एक अच्छी किताब की तरह दिखता है:

2

स्वीकारकर्ता/कनेक्टर पैटर्न: http://www.cs.wustl.edu/~schmidt/PDF/Acceptor.pdf

चेन जिम्मेदारी के गोफ चेन पर फ़िल्टर बेस का, यह बहुत सारे नेटवर्क स्टैक/ढांचे में उपयोग किया जाता है।

एन्कोडिंग/डीकोडिंग पीडीयू के लिए राज्य मशीनें।

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