2012-06-04 23 views
55

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

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

पहिया को रीमेक करने और कुछ समय बचाने के लिए, मैंने मौजूदा समाधान के लिए इंटरनेट पर देखा लेकिन मुझे कुछ भी संबंधित (शायद खराब कीवर्ड) नहीं मिला है।

तो क्या कोई इस तरह के काम के बारे में जागरूक है या क्या मुझे कुछ याद आ रही है?

+0

WebSockets वास्तव में है कि क्लासिक HTTP अनुरोध-प्रतिक्रिया व्यवहार के लिए नहीं हैं:

अंतिम परिणाम आप वेब सॉकेट पर कॉलबैक लागू कर सकते हैं इस तरह समारोह भेजना है। वे * इवेंट-आधारित * हैं, जैसे जावास्क्रिप्ट इवेंट्स: वे अनचाहे आते हैं। – rvighne

उत्तर

36

WebSocket आवेदन संदेश प्रोटोकॉल (WAMP) http://wamp.ws/ RPC (दूरस्थ प्रक्रिया कॉल) और pubsub (प्रकाशित & सदस्यता लें) मैसेजिंग पैटर्न उस उद्देश्य के लिए कच्चे WebSocket की चोटी पर प्रदान करता है।

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

अस्वीकरण: मैं डब्ल्यूएएमपी और कुछ (ओपन-सोर्स) डब्ल्यूएएमपी कार्यान्वयन के लेखक हूं। यह एक खुली पहल है, अन्य लोगों ने नाव पर उतरना शुरू कर दिया है। आखिरकार, एक डब्ल्यूएएमपी आरएफसी सही ढंग से प्रोटोकॉल को परिभाषित करना चाहिए .. लेकिन यह अभी भी शुरुआती चरणों में है।

+0

बिल्कुल वही जो मैं खोज रहा था। मैं जावा पर दोनों तरफ काम कर रहा हूं और आपको जावा कार्यान्वयन नहीं लगता है इसलिए मुझे शामिल होने में खुशी होगी :) – Ghetolay

+0

बढ़िया! हमसे जुड़ें! बीटीडब्ल्यू: हमारे पास एक एंड्रॉइड विशिष्ट जावा क्लाइंट-केवल कार्यान्वयन है: https://github.com/tavendo/AutobahnAndroid WAMP संसाधनों का युगल: http://wamp.ws/spec, https://github.com/tavendo/वैंप, उत्तरार्द्ध में उल्लिखित मेलिंग सूची, और (ज्यादातर ऐतिहासिक कारणों से), ऑटोबहन के लिए मेलिंग सूची: http://groups.google.com/group/autobahnws। – oberstet

+0

@oberstet मेरे पास वेबसाकेट और अपाचे सर्वर के संदर्भ में एक संबंधित और समान प्रश्न है जो लगातार एक बार के बजाय क्लाइंट को बार-बार जानकारी भेज रहा है। Http://stackoverflow.com/questions/25071639/configure-apache-server-and-websockets-to-prevent-repeated-pulling-of-same- किसी भी सुझाव पर स्थित है? – Sauron

1

मैं websockets का उपयोग कर एक सरल अनुरोध-प्रतिक्रिया कार्यक्रम चला रहा हूं। "Websocket Server Demonstration" देखें। आप वेबपृष्ठ स्रोत कोड डाउनलोड कर सकते हैं।

2

SwaggerSocket पर एक नज़र डालें, जो सभी प्रमुख जावा वेब सर्वर के साथ समर्थित वेबसाकेट प्रोटोकॉल पर एक आरईएसटी है।

11

मैं JSON-RPC 2.0 का उपयोग करूंगा।

http://www.jsonrpc.org/specification

प्रत्येक संदेश एक JSON ऑब्जेक्ट होगा। प्रोटोकॉल बताता है कि यह एक कॉल है जो प्रतिक्रिया (आईडी के साथ युग्मन), या अधिसूचना चाहता है।

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

के बारे में मैं वापस आने के रूप में ajax के साथ, WebSocket से अधिक json RPC को संभालने के लिए एक जावास्क्रिप्ट lib निर्माण करने के लिए कर रहा हूँ ...

+0

क्लाइंट भाग यहां है: https://github.com/Textalk/jquery.jsonrpcclient.js – fiddur

+0

मेरी योजना जेएस में जेएसओएन-आरपीसी सर्वर भी जोड़ना है, इसलिए बैकएंड ब्राउज़र में अनुरोध भेज सकता है मार्ग। – fiddur

+1

+1 JSON-RPC वास्तव में वेबसॉकेट के लिए बहुत उपयुक्त है, और विशेष रूप से PubSub (WAMP की साइट के विपरीत बयान के बावजूद)। वेबसॉकेट बनाम जेएसओएन-आरपीसी के साथ सबसे बड़ा बहस मुद्दा प्रतिक्रिया की कमी है, इसलिए, माना जाता है कि जेएसओएन-आरपीसी का उपयोग करना और वेबसॉकेट पर जेएसओएन-आरपीसी में "अधिसूचना" मोड का उपयोग करने की आवश्यकता है। हालांकि, जेएसओएन-आरपीसी कॉल के साथ चिपके हुए जिसमें 'आईडी' (फ्लैगिंग गैर-अधिसूचना मोड) तत्व शामिल है, वास्तव में उस आईडी के अंतर्गत आने वाले द्वि-दिशात्मक एसिंक प्रतिक्रियाओं को अनुमति देता है (बस बी/ई पर कॉलबैक के लिए आईडी पास करने की आवश्यकता है) और आप जारी रख सकते हैं प्रतिक्रिया-कम अनुरोधों के लिए अधिसूचना मोड का उपयोग करना। – ddotsenko

1

msg-rpc पर एक नजर डालें, तो यह सरल संदेश इंटरफ़ेस पर द्विदिश RPC सहायता प्रदान करता है, WebSocket शामिल हैं।

न केवल साधारण आरपीसी, जो "क्लाइंट अनुरोध/सर्वर प्रतिक्रिया" व्यवहार को कवर कर सकता है, यह "सर्वर अनुरोध/ग्राहक प्रतिक्रिया" व्यवहार का भी समर्थन करता है, जो आरपीसी सेवा के माध्यम से होता है।

आरंभ करने के लिए, सॉक और सॉकेट.ओ उदाहरण हैं।

0

(अनुरोध के साथ एक आईडी भेजने के लिए और समय समाप्त अवधि तक एक ही आईडी वाले एक प्रतिक्रिया के लिए प्रतीक्षा)

मैं एक lib कि कि वास्तव में करता है बनाया है, कहा जाता है WebSocketR2 (जहां R2 अनुरोध प्रतिक्रिया का मतलब): https://github.com/Modern-Edge-Software/WebSocketR2

यदि कोई कनेक्शन गुम हो जाता है तो यह सर्वर से फिर से कनेक्ट होने पर भी संभालता है, जो उपयोगी हो सकता है यदि आप लोड बैलेंसर के माध्यम से वेब सॉकेट कर रहे हैं।

var request = { 
    action: "login", 
    params: { 
     username: "test", 
     password: "password" 
    } 
}; 

ws.send(request, function(response){ 
    console.log(response) 
}); 
संबंधित मुद्दे