2012-05-03 13 views
7

सॉकेट.ओ के विकल्प के रूप में, सॉकजेएस (https://github.com/sockjs/sockjs-client) है, जो सॉकेट.ओओ से बेहतर बनाए रखा और अधिक स्थिर प्रतीत होता है।सॉकजेएस को किसी अन्य वेब ढांचे के साथ एकीकृत करने के लिए

यह सवाल वैचारिक समझ के बारे में एक वेब ढांचे के साथ SockJS का उपयोग कर, कहते हैं, एक चैट आवेदन के निर्माण

मेरे वर्तमान समझ है कि आप SockJS-ग्राहक और एक SocketJS सर्वर की आवश्यकता है के लिए की वास्तुकला है (मेरे मामले में, मैं websockets-style संचार बनाने में सक्षम होने के लिए सॉकजेएस-टोरनाडो (https://github.com/MrJoes/sockjs-tornado) का उपयोग करना चाहता हूं।

लेकिन सॉकजेएस (सॉकजेएस-क्लाइंट + सॉकजेएस-टोरनाडो) एक वेब ढांचे के साथ कैसे जुड़ता है जो बाकी काम करता है (उदाहरण के लिए पृष्ठ की सेवा, लेखन/डीबी से पढ़ने/पढ़ने)। उदाहरण के लिए, सॉकजेएस-टोरनाडो घटक ढांचे के वेब सर्वर के साथ कैसे संचार करेगा? विशेष रूप से, web2py (एक अजगर वेब ढांचे) के साथ ऐसा करने की कोई भी दिशा अत्यधिक सराहना की जाती है।

+0

आप इस तरह के RabbitMQ या ZeroMQ के रूप में एक संदेश कतार का उपयोग कर सकते हैं। – igorw

+0

@igorw, क्या आप कह रहे हैं कि मैं सॉकजेएस-टोरनाडो सर्वर को ढांचे के वेब सर्वर से कनेक्ट करने के लिए एक संदेश कतार का उपयोग कर सकता हूं, ताकि सॉकजेएस-टोरनाडो द्वारा प्राप्त सामग्री को ढांचे के साथ साझा किया जा सके? क्या आप विस्तार से बता सकते हैं? धन्यवाद। – MLister

+0

वैसे, सुझावों के लिए http://autobahn.ws/ – Alp

उत्तर

4

आप सही हैं, सॉकजेएस के लिए आपको एक सॉज-सक्षम सर्वर और एक ब्राउज़र ब्राउज़र जावास्क्रिप्ट क्लाइंट लाइब्रेरी की आवश्यकता है।

  1. आप अपने सभी साइट तूफान से कार्य किया हो सकता है:

    आम तौर पर दो एकीकरण पैटर्न रहे हैं, मान लीजिए कि आप sockjs-बवंडर का उपयोग करना चाहते हैं। इसके साथ, कुछ पथ के लिए हुक सॉक्स-टॉरनाडो, उदाहरण के लिए 'http://mysite.com/sockjs'। इस परिदृश्य में आपकी वेबसाइट और सॉक्स दोनों mysite.com डोमेन से परोसे जाएंगे।

  2. आप अपनी साइट को जो भी भाषा/ढांचे में लिखा है उसे रख सकते हैं और एक अलग डोमेन के तहत, सॉकज-सर्वर को एक और असंतुलित जोड़ सकते हैं। 'Http://sockjs.mysite.com/sockjs'।

इसके अतिरिक्त, आप इसका कोई भी भिन्नता उपयोग कर सकते हैं - उदाहरण के लिए: आंतरिक रूप से दो सर्वर हैं लेकिन स्मार्ट लोडब्लैंसर (जैसे हैप्रोक्सी) का उपयोग करके उन्हें एक डोमेन के रूप में बेनकाब करें।

+1

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

+2

दो अलग सर्वर रखें। एक - आपका पुराना ऐप। नया - सॉक्स-टॉरनाडो। यदि आप इसे एक डोमेन के रूप में बेनकाब करना चाहते हैं, या केवल दो अलग-अलग डोमेन का उपयोग करना चाहते हैं तो रूटिंग के लिए हैप्रोक्सी का उपयोग करें। यदि आपको सॉक्स और आपके ऐप के बीच संचार की आवश्यकता है - दोनों के बीच संदेशों का आदान-प्रदान करने के लिए रेडिस पब/उप, खरगोश एमक्यू या ज़ीरोमक का उपयोग करें। – Marek

+0

हाय @ मरेक। मैं ऐप और सॉक्स के बीच संदेशों का आदान-प्रदान कैसे करूं जहां मुझे केवल 2 अलग-अलग सर्वर होना चाहिए? मेरा वर्तमान सेटअप यह है कि मुझे तीसरा एक चलाना है .. zmq सर्वर स्क्रिप्ट जहां 4 सॉकेट बाध्य हैं। receiver_from_server.bind ("टीसीपी: // *: 5561") # zmq.PULL forwarder_to_server.bind ("टीसीपी: // *: 5562") # zmq.PUSH receiver_from_websocket.bind ("टीसीपी: // * : 5563 ") # zmq.PULL forwarder_to_websocket.bind (" tcp: // *: 5564 ") # zmq.PUSH –

1

यदि आप वेबवर्क को फ्रेमवर्क के रूप में उपयोग कर रहे हैं तो आप gluon/contrib में comet_messaging.py देख सकते हैं। यह web2py ऐप से संदेशों को आपके वेबसाइकिल क्लाइंट में प्राप्त करने के लिए एक फ़ंक्शन (comet_send) प्रदान करता है। यह टॉरनाडो (डब्ल्यू/ओ सॉकजेएस सपोर्ट) पर आधारित है, लेकिन वितरण हैडलर फॉलबैक परिवहन समर्थन प्रदान करने के लिए एक सॉकजेएस कनेक्शन को उपclass कर सकता है। इस दृष्टिकोण में आपके क्लाइंट सामान्य जीईटी या पोस्ट HTTP अनुरोधों के माध्यम से संदेश भेजते हैं जिन्हें वेब 2py नियंत्रकों (या अन्य ढांचे) द्वारा नियंत्रित किया जाता है और comet_messaging.comet_send() को कॉल करने वाले वेब 2py नियंत्रकों से संदेश प्राप्त होते हैं जो टर्ननाडो उदाहरण के लिए एक पोस्ट अनुरोध भेजते हैं जो तब विस्फोट करता है यह श्रोताओं की सूची में बाहर है।

की तरह लग रहे comet_messaging में संशोधित लाइनों (सूचना खुला on_open हो जाता है):

class DistributeHandler(sockjs.tornado.SockJSConnection): 
    def on_open(self, r): 
    group,token,name = [None, None, None] 
    self.group = group or 'default' 
    self.token = token or 'none' 
    self.name = name or 'anonymous' 

और

urls=[ 
    (r'/', PostHandler), 
    (r'/token', TokenHandler), 
    (r'/realtime', DistributeHandler)] 

सूचना मैं DistributeHandler URLSpec में regex समूह को हटाने के लिए क्योंकि sockJS-बवंडर था इस पर घुटने टेकना अभी भी यह पता लगाने की कोशिश कर रहा है कि पथ से पैरामीटर को ऑन_ऑपेन हैंडलर में कैसे प्राप्त करें।

0

यह कैसे Django में SockJS एकीकृत करने के लिए पर एक पूर्ण उत्तर प्रदान करता है: https://stackoverflow.com/a/10950702/675065

मूल रूप से आप की जरूरत:

  • तूफान + SockJS-तूफान
  • Redis + Brukva

मैं इस कॉन्फ़िगरेशन का उपयोग अपनी खुद की परियोजना में करें और यह बहुत अच्छी तरह से काम करता है।

या: आप ऑटोबान तरह से प्रयास करें: http://autobahn.ws/ (मैं यह अभी तक की कोशिश नहीं की थी)

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

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