2016-02-16 7 views
5

मुझे मूल संदेश/प्रतिक्रिया प्रोटोकॉल के साथ टीसीपी/आईपी पर सर्वर से बातचीत करने की आवश्यकता है (इसलिए प्रत्येक अनुरोध के लिए मुझे एक परिभाषित प्रतिक्रिया प्राप्त होगी)।जावा सॉकेट अभी भी जावा में टीसीपी/आईपी प्रोग्रामिंग के लिए पहली पसंद है?

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

तो क्या जेडीके या जेवीएम ब्रह्मांड में कुछ नया है?

+1

यदि आपकी आवश्यकताएं मूल हैं तो 'सॉकेट' से परे देखने का कोई कारण नहीं है। – EJP

+0

आप एनआईओ में गैर-अवरुद्ध सॉकेट हैंडलिंग देखना चाहते हैं। –

+0

या आप "मूल संदेश/प्रतिक्रिया प्रोटोकॉल" से दूर हो सकते हैं। – Stefan

उत्तर

4

नहीं है, देखते हैं ज्यादा बेहतर विकल्प आजकल का पालन करें, जो आपको अतिरिक्त सूत्रण बिना एसिंक्रोनस रूप से अपने ग्राहक/सर्वर को लागू करने की अनुमति देते हैं।

एनओओ से SocketChannel या nio2 से बेहतर AsynchronousSocketChannel पर देखें। इस tutorial

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

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

+0

एनआईओ निम्न स्तर के लिए बेहतर है लेकिन एनआईओ 2 केवल वास्तव में उपयोगी है यदि आपके पास इन्फिनिबैंड आईएमएचओ है। –

2

आप आरएमआई को आजमा सकते हैं जो टीसीपी/आईपी के शीर्ष पर काम करता है लेकिन एपीआई के सुविधाजनक सेट के साथ सभी कड़ी मेहनत को छुपाता है।

इस ट्यूटोरियल post

+0

किसने कहा कि मैं रिमोट सर्वर पर विधियों का आह्वान कर रहा हूं? मैं सिर्फ संदेश भेज रहा हूं और कुछ स्ट्रिंग वापस प्राप्त कर रहा हूं :-) – Sebi

1

वैसे, वास्तव में उपयोग करने के लिए कई अन्य तकनीकें हैं, उदाहरण के लिए जेएमएस में विभिन्न कार्यान्वयन हैं जो बॉक्स से बाहर काम करते हैं।

सॉकेट नेटवर्क संचार के निम्न स्तर के निर्माण ब्लॉक हैं, जैसे आपके घर के बिजली नेटवर्क में तार। हां, वे पुराने हैं, हां, हम शायद उन्हें देखना नहीं चाहते हैं, लेकिन वे वहां हैं और वे एक अच्छे कारण के लिए वहां रहेंगे।

सॉकेट के शीर्ष पर, आप उदा। HTTPUrlConnection चुनें, जो अधिकांश HTTP प्रोटोकॉल लागू करता है। फिर भी, टाइमआउट नीतियों को सेट करना आपके हाथों में है, जो मुझे एक ही समय में काफी उपयोगी और अत्यधिक दर्दनाक लगता है। http://unirest.io/java.html

उदाहरण से ऊपर, एक सर्वर से कनेक्ट एक HTTP क्वेरी स्ट्रिंग कॉन्फ़िगर करता है:

http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/

आप एक अमूर्त के स्तर से ऊपर एक रेडीमेड बाकी पुस्तकालय, इस जैसे ले जाते हैं, और उपयोग कर सकते हैं , अनुरोध (टाइमआउट, एन्कोडिंग, सभी हुड के नीचे गंदगी) करते हैं, और अंत में एक कुछ पंक्तियों में JSON प्रारूप में प्रतिक्रिया मिल:

Unirest.post("http://httpbin.org/post") 
    .queryString("name", "Mark") 
    .field("last", "Polo") 
    .asJson(); 

आजकल वेब सेवाओं का एक विशाल राशि बाकी का उपयोग कर उपलब्ध हैं प्रोटोकॉल, जो HTTP पर एक सरल कमांड-प्रतिक्रिया है। यदि आपके पास मौका है, तो मैं आरईएसटी का उपयोग करने का सुझाव दूंगा, क्योंकि आप आसानी से उपलब्ध क्लाइंट और सर्वर साइड कार्यान्वयन ढूंढ सकते हैं, और आपको कमांड-प्रोटोकॉल परत पर पहिया को फिर से शुरू करने की आवश्यकता नहीं है।

ग्राहक पक्ष पर, unirest काफी सुविधाजनक है।सर्वर की तरफ, हमने 1.2.xx श्रृंखला के प्ले में वास्तव में बहुत अच्छा अनुभव किया है! ढांचा। लेकिन वहां हजारों चीजें हैं, बस "आरईएसटी" की तलाश करें।

+0

क्षमा करें, लेकिन प्रोटोकॉल के रूप में लागू नहीं है जिसे मुझे उपयोग करना है टीसीपी/आईपी स्तर पर है, न कि HTTP या आरईएसटी पर भी। – Sebi

+0

यदि आपको टीसीपी/आईपी स्तर पर चीजों को नियंत्रित करने की आवश्यकता है, तो सॉकेट और एनओओ का उपयोग करने में क्या गलत है? :) –

1

Netty Project को एक नजर डालें, "Netty एक NIO क्लाइंट सर्वर ढांचा जो इस तरह के प्रोटोकॉल सर्वर और क्लाइंट के रूप में नेटवर्क आवेदनों की जल्दी और आसानी से विकास को सक्षम बनाता है। यह बहुत सरल और इस तरह के TCP और UDP सॉकेट सर्वर के रूप में नेटवर्क प्रोग्रामिंग को सुव्यवस्थित । "

यह ढांचा हमें कई क्षमताओं को प्रदान करता है जो प्रोग्रामिंग प्रक्रिया को सरल बनाते हैं, जिससे बड़ी स्केलेबिलिटी होती है।

ट्विटर और टेक्नोलॉजी उद्योग में कई बड़ी कंपनियों द्वारा उपयोग किया जाता है।

यह नॉर्मन मूरर से nice presentation है।

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