2010-03-17 13 views
6

मैं अपनी परियोजना में कुछ नेटवर्किंग सामग्री को लागू कर रहा हूं। यह निर्णय लिया गया है कि संचार बहुत महत्वपूर्ण है और हम इसे समकालिक रूप से करना चाहते हैं। तो ग्राहक कुछ स्वीकार करता है जो सर्वर स्वीकार करता है।क्या कुछ सामान्य नेटवर्क प्रोग्रामिंग सर्वोत्तम प्रथाएं हैं?

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

मैं सामान्य रूप से सर्वोत्तम प्रथाओं की तलाश में हूं। मैं इसे C# (शायद सॉकेट के साथ) में कार्यान्वित कर रहा हूं, इसलिए यदि कुछ भी है तो नेट विशिष्ट है तो कृपया मुझे भी बताएं।

+1

http://stackoverflow.com/questions/2368580/socket-protocol-fundamentals रुचि का हो सकता है। –

उत्तर

6

नेटवर्किंग का पहला नियम - आप संदेश भेज रहे हैं, आप फ़ंक्शंस कॉल नहीं कर रहे हैं।

आपको लगता है कि जिस तरह से नेटवर्किंग दृष्टिकोण, और नाटक नहीं करते है कि आप कार्यों दूर से फोन या "दूरस्थ वस्तुओं" हो सकता है, तो आप ठीक हो जाओगे। नेटवर्क कनेक्शन के दूसरी तरफ आपके पास वास्तविक "चीज़" नहीं है - जो आपके पास है वह मूल रूप से उस चीज़ की एक तस्वीर है।

सब कुछ आप नेटवर्क से प्राप्त पुराने डेटा है। आप कभी भी अद्यतित हैं। इस वजह से, आपको यह सुनिश्चित करने की ज़रूरत है कि आपके संदेश सही अर्थशास्त्र लेते हैं - उदाहरण के लिए, आप किसी मूल्य से कुछ बढ़ा या घटा सकते हैं, आपको अपना मान वर्तमान मूल्य प्लस या किसी अन्य से कम नहीं करना चाहिए (जैसा कि वर्तमान मान हो सकता है जब आपका संदेश वहां जाता है तब तक बदलें)।

2

दोनों क्लाइंट और सर्वर नेट में लिखा रहे हैं/सी # मैं WCF सिफारिश करेंगे कच्चे सॉकेट के insted के रूप में यह क्रमबद्धता और अक्रमांकन, संदेश आदि

के तुल्यकालन के साथ पाइपलाइन कोड का एक बहुत से आप एक बचत होती है

शायद वास्तव में अपने प्रश्न के बारे में सर्वोत्तम प्रथाओं हालांकि ;-)

1

पहली बात करने के लिए गति, खो गए संदेशों, नाममात्र और चोटी यातायात, बाधाओं की संभावना, ग्राहक के संदर्भ में अपनी विशिष्ट नेटवर्क चिह्नित करने के लिए है उत्तर नहीं मिलता है यही कारण है कि और सर्वर MTBF, ...

तब और उसके बाद ही आप तय करते हैं कि आप y के लिए क्या जरूरत है हमारे प्रोटोकॉल। कई मामलों में आपको परिष्कृत त्रुटि-हैंडलिंग तंत्र की आवश्यकता नहीं है और सादे यूडीपी के साथ एक सेवा को विश्वसनीय रूप से कार्यान्वित कर सकते हैं।

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

1

सबसे महत्वपूर्ण बात मैंने पाया कि संदेश हमेशा राज्यविहीन होना चाहिए (बाकी को पढ़ने अगर यह आप के लिए कुछ भी नहीं मतलब है)

उदाहरण के लिए यदि आपके आवेदन एक नेटवर्क पर लदान की संख्या पर नज़र रखता है वृद्धिशील नहीं भेजते है अपडेट (+ एक्स) लेकिन हमेशा नया कुल।

+0

यह सही समझ में आता है। अच्छी सलाह। सौभाग्य से हमारे लिए हमारे संदेश स्टेटलेस हैं। यह डिजाइन के मुकाबले संयोग से अधिक है :) – uriDium

+0

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

+0

स्टेटलेस एक अच्छा सामान्य दिशानिर्देश है, लेकिन * हमेशा * आवश्यक नहीं है। कुछ परिदृश्य वास्तव में गैर-स्टेटलेस संदेश मांगते हैं - यह स्थिति पर निर्भर करता है। हालांकि, पहले स्टेटलेस जा रहा है एक महान ह्युरिस्टिक है। और "टॉगल संदेश" की तरह कुछ स्वाभाविक रूप से खराब है। दूसरी तरफ, जैसा कि मैंने अपने जवाब में बताया है, "वृद्धि" जैसी कुछ चीज अक्सर वही होती है जो आप चाहते हैं, क्योंकि यह हमेशा सर्वर पर सही चीज करेगी (बनाम "5 पर सेट करें" यदि आपको वर्तमान मूल्य लगता है 4 है) – kyoryu

0

नेटवर्क प्रोग्रामिंग के बारे में एक आम विचार में, मुझे लगता है कि आपको इसके बारे में सीखना चाहिए:
1. सॉकेट (बेशक)।
2. फोर्क और थ्रेडिंग।
3. लॉकिंग प्रक्रिया (म्यूटेक्स या सेमफोर या अन्य का उपयोग करें)।

आशा इस मदद ..

+0

हाय, धन्यवाद लेकिन वास्तव में नहीं। वह सब ठीक है। मैं बस कुछ सामान्य दिशानिर्देशों की तलाश में था। उदाहरण के लिए एसीके आदि का उपयोग – uriDium

+0

थ्रेडिंग के बारे में सीखने के बजाय, मैं गैर-अवरुद्ध आईओ (यदि सॉकेट स्तर पर काम कर रहा हूं) के बारे में सीखूंगा। – kyoryu

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

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