2010-08-05 9 views
5

मैं कहाँ काम हम एक प्रोटोकॉल के लिए सक्षम की जरूरत होती हैं:के बारे में खुद प्रोटोकॉल के डिजाइन/कार्यान्वयन युक्तियाँ

  • उपयोगकर्ता लॉगिन/लॉगआउट
  • संदेश/Recive निर्देश
  • संदेश/Recive फ़ाइलों
  • ऑडियो स्ट्रीम भेजें/पुनः प्राप्त करें (आरटीपी का उपयोग कर सकते हैं)
  • छोटी एक्सएमएल फाइलें भेजें/पुन: प्राप्त करें
  • उन सभी के लिए क्रिप्टोग्राफ़ी का उपयोग करें।

इसे जावा में लागू किया जाएगा। तो मेरे पास कुछ प्रश्न हैं, क्योंकि मैंने अभी तक नेटवर्क प्रोटोकॉल को कभी भी लागू नहीं किया है।

  1. क्या इसे बनाने के लिए मौजूदा प्रोटोकॉल का उपयोग करना संभव है?
  2. प्रोटोकॉल को डिजाइन करने में मेरी सहायता के लिए मैं किस टूल का उपयोग कर सकता हूं? "मॉडलिंग" के लिए
  3. क्या यह सब अकेले करना संभव है, इसे अकेले कर रहा है? मेरे पास जितना समय है उतना समय है।

मेरे पास जावा और सी ++ में बहुत अच्छी पृष्ठभूमि है, लेकिन अभी तक सॉकेट/नेटवर्किंग प्रोग्रामिंग के साथ नहीं है।

धन्यवाद

उत्तर

2

मुझे लगता है कि आप या तो एसआईपी को फिर से शुरू करने की कोशिश कर रहे हैं (यदि आपका पैकेट प्रोसेसिंग ज्यादातर स्टेटलेस है और एक्सएमएल < 3 के पैकेट में जाने के लिए पर्याप्त छोटा है), या एक्सएमपीपी।

यदि आपको कनेक्शन उन्मुख लॉगिन/लॉगआउट और राज्य के आदेश/निर्देशों की आवश्यकता है, तो एक्सएमपीपी शायद आवश्यकताओं के करीब है। इसके अलावा, Jingle extension से एक्सएमपीपी पहले ही आरटीपी सेटअप और टियरडाउन से संबंधित है। एक्सएमएल संदेश कस्टम एक्सएमपीपी पैकेट (जो स्वयं एक्सएमएल हैं) में एम्बेड करने के लिए तुच्छ हैं और फाइल ट्रांसफर प्रॉक्सी करने के लिए एक्सएमपीपी समाधान ज्ञात हैं।

मुझे पूरा यकीन है कि यह आपकी आवश्यकताओं को अच्छी तरह से पूरा करता है (कम से कम जिस तरह से वे यहां प्रस्तुत किए जाते हैं)। यदि आपको पूरी तरह से नया प्रोटोकॉल डिज़ाइन करने की आवश्यकता नहीं है, तो यह संभवतः आसान है यदि आप नहीं करते हैं। मौजूदा एक्सएमपीपी सर्वर का भी पुन: उपयोग करने से आप अपना संदेश ब्रोकर बनाने के दर्द को हल कर सकते हैं। ओपनफायर सर्वर है, जो जावा में लिखा गया है।

+0

बहुत बहुत धन्यवाद ... मैं जिंगल और एक्सएमपीपी – fredcrs

+0

की जांच करूंगा और मुझे लगता है कि स्मैक का उपयोग किया जा सकता है मेरे क्लाइंट को बनाने के लिए ... और मुझे सर्वर के रूप में ओपनफायर का उपयोग करना चाहिए। लेकिन मुझे नहीं पता कि स्मैक समर्थन स्ट्रीमिंग है, मैं इसके लिए बिना किसी सफलता के googled। क्या यह सबसे अच्छा तरीका होना चाहिए? – fredcrs

+0

मेरा मतलब ऑडियो स्ट्रीमिंग क्षमा नहीं है। – fredcrs

0

आप http या https इस्तेमाल कर सकते हैं। जावा मीडिया ढांचे में आरटीपी का कार्यान्वयन होता है।

+0

http (ओं) बड़ी फाइलें/ऑडियो इत्यादि भेजने पर भयानक है। यह भी स्टेटलेस है इसलिए लॉगिन सामग्री बनाना कठिन होगा। –

3

Google Protocol Buffers पर एक नज़र डालें, जो एक कॉम्पैक्ट वायर प्रोटोकॉल उत्पन्न करेगा और साथ ही जावा संदेश कक्षाओं को स्वत: उत्पन्न करेगा। काश मैं जावा एनआईओ ByteBuffer एस का उपयोग कर अपना संदेश कोडेक रोल करने से पहले इसके बारे में सुना होगा।

+0

+1, यह वास्तव में एक दिलचस्प परियोजना थी जिसे मैंने पहले कभी नहीं सुना है। मैंने कुछ साल पहले बाइटबफर के साथ एक संपूर्ण संदेश संदेश को भी लॉन्च किया था (और कभी-कभी यह काफी परेशान था), अगर मेरे पास ऐसा कुछ था तो मैं विकास के समय में काफी कटौती कर सकता था (लेकिन हे, यह काम करता था!)। जब मुझे कुछ खाली समय मिलता है तो मैं निश्चित रूप से इस पर एक नज़र डालूंगा। बस इतना बुरा है कि मेरे वर्तमान काम (सी # और डब्ल्यूसीएफ ...) में इसके लिए ज्यादा उपयोग नहीं होगा। – wasatz

+2

बस ध्यान रखें कि भले ही इसे नाम में "प्रोटोकॉल" मिल गया है, फिर भी यह वास्तव में एक तरीका है (डी) संदेशों को एक बाइनरी प्रारूप में क्रमबद्ध करना। यह आपके स्वयं के संदेश विनिमय को डिजाइन करने में केवल एक छोटा कदम है। आपको राज्यों, त्रुटि वसूली, संभावित संघर्ष/संदेश दौड़ इत्यादि से निपटने आदि के बारे में सोचना होगा। – viraptor

0

स्क्रैच से प्रोटोकॉल लिखने के लिए बहुत सारे काम की आवश्यकता हो सकती है। एक्सएमपीपी पर एक नज़र डालें।

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

1

मुझे नहीं पता कि यह बुरी सलाह है या नहीं, लेकिन मैं आमतौर पर अपने नेटवर्किंग अनुप्रयोगों के लिए जो करता हूं वह एक संदेश ऑब्जेक्ट बनाना है जिसमें एक TAG स्ट्रिंग और सामग्री स्ट्रिंग है। सामग्री भाग आमतौर पर एक JSON स्ट्रिंग होता है और संदेश स्वयं को सर्वर से/json स्ट्रिंग के रूप में भी भेजा जाता है।

जब सर्वर या क्लाइंट को कोई संदेश प्राप्त होता है, तो यह जेसन को संदेश ऑब्जेक्ट में पार्स करता है। इसके बाद आप संदेश के TAG भाग को देख सकते हैं कि संदेश के CONTENT भाग में किस प्रकार की सामग्री आयोजित की जाती है और यह तय करें कि इसके साथ क्या किया जाए।

उदाहरण के लिए, यदि TAG == "LOGIN" तो सामग्री लॉगिन विवरण या समान हो सकती है। और जब TAG == "संदेश" तो सामग्री आपके मानकों का प्रतिनिधित्व करने वाली एक जेसन स्ट्रिंग होगी, उदाहरण के लिए, प्राप्तकर्ता/एस कौन है और संदेश की सामग्री क्या है, आदि

आप तब कर सकते हैं आप तारों पर एन्क्रिप्शन और डिक्रिप्शन। यदि यह करने का एक बेवकूफ तरीका है, तो कृपया मुझे एक टिप्पणी में बताएं ताकि मैं सीख सकूं :)

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

+0

अपना दृष्टिकोण साझा करने के लिए धन्यवाद! यह संकेत दिया कि मैं सही दिशा में हूं। –

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