2014-04-20 12 views
8

स्प्रिंग और जावा ईई के पास websockets के लिए अच्छा समर्थन है। वसंत में उदाहरण के लिए आप कर सकते हैं:वेबसाइट्स और लोड संतुलन

@Configuration 
@EnableWebSocket 
public class WebSocketConfig implements WebSocketConfigurer { 

    @Override 
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { 
     registry.addHandler(new MyHandler(), "/myHandler") 
      .addInterceptors(new HttpSessionHandshakeInterceptor()); 
    } 

} 

और MyHandler वर्ग के साथ आप भेज सकते हैं और एचटीएमएल 5 WebSocket करने के लिए संदेश के लिए सुन सकते हैं।

var webSocket = 
     new WebSocket('ws://localhost:8080/myHandler'); 
webSocket.onmessage = function(event) { 
     onMessage(event) 
    }; 

समस्या यह है कि यदि आप लोड बैलेंसर के पीछे एकाधिक सर्वर चलाते हैं। सर्वर एक के ग्राहकों सर्वर बी

यह समस्या Stomp प्रोटोकॉल (http://assets.spring.io/wp/WebSocketBlogPost.html)

साथ संदेश दलाल का उपयोग करके वसंत में हल किया जाता है हैंडलर और का उपयोग कर के बाद से "मूल" एचटीएमएल 5 WebSockets दिखता है पर घटनाओं के लिए सूचित नहीं किया जाएगा मेरे लिए आसान तो स्टॉम्प तरीका, मेरे प्रश्न हैं:

  1. क्या स्टॉम्प प्रोटोकॉल के बिना संदेश ब्रोकर का उपयोग करना उचित है?
  2. लोड संतुलन मुद्दे को दूर करने के लिए कोई अन्य विकल्प हैं?

उत्तर

3

संदेश दलालों को STOMP के बिना उपयोग किया जा सकता है, उदाहरण के लिए RabbitMQ broker लें, इसका उपयोग कई अन्य प्रोटोकॉल के साथ किया जा सकता है; HTTP, एएमक्यूपी, एमक्यूटीटी, एएमक्यूपी। आप उन्हें जेएमएस कार्यान्वयन के रूप में उपयोग कर सकते हैं।

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

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

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

उस स्थिति में सॉकजेएस स्वचालित रूप से कुछ फ़ॉलबैक विकल्पों का उपयोग करेगा जो वेब सॉकेट संभव नहीं होने पर लात मारते हैं।

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