Java पर WebSocket: उन्नत स्तर के real-time अनुप्रयोग बनाना
आधुनिक वेब अनुप्रयोगों में अक्सर क्लाइंट और सर्वर के बीच तत्काल डेटा स्थानांतरण की आवश्यकता होती है। पारंपरिक HTTP, जो अनुरोध-प्रतिक्रिया पर आधारित है, उन कार्यों के लिए अप्रभावी है जहां विलंबता महत्वपूर्ण है: ऑनलाइन चैट, शेयर बाजार कोटेशन, सहयोगात्मक दस्तावेज़ संपादन या गेम सर्वर। WebSocket प्रोटोकॉल एक स्थायी द्विदिश कनेक्शन स्थापित करके इस समस्या का समाधान करता है। इस लेख में, हम Java पर WebSocket के साथ काम करने की उन्नत तकनीकों पर विचार करेंगे, जो बुनियादी उदाहरणों से परे हैं।
1. Java पर उन्नत WebSocket अनुप्रयोग की वास्तुकला
एनोटेशन @ServerEndpoint का उपयोग करके Java पर WebSocket का मूल उदाहरण सीखने के लिए अच्छा है, लेकिन production-समाधानों के लिए अधिक विश्वसनीय वास्तुकला की आवश्यकता होती है। आइए प्रमुख घटकों पर विचार करें।
1.1. प्रौद्योगिकी स्टैक का चयन
एंटरप्राइज़ अनुप्रयोगों के लिए, डी-फैक्टो मानक Spring Boot है जिसमें मॉड्यूल spring-boot-starter-websocket शामिल है। यह STOMP (Simple Text Oriented Messaging Protocol) के साथ एकीकरण प्रदान करता है - WebSocket के ऊपर एक उप-प्रोटोकॉल जो संदेश रूटिंग, कतारें और सब्सक्रिप्शन जोड़ता है।
1.2. Spring Boot में WebSocket की मूल कॉन्फ़िगरेशन
हम एक कॉन्फ़िगरेशन क्लास से शुरू करते हैं:
@Configuration@EnableWebSocketMessageBrokerpublic class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override public void configureMessageBroker(MessageBrokerRegistry config) { // /topic और /queue कतारों के लिए अंतर्निहित ब्रोकर config.enableSimpleBroker("/topic", "/queue"); // क्लाइंट से सर्वर पर संदेशों के लिए उपसर्ग config.setApplicationDestinationPrefixes("/app"); // उपयोगकर्ता कतारों के लिए उपसर्ग (पॉइंट-टू-पॉइंट) config.setUserDestinationPrefix("/user"); }
@Override public void registerStompEndpoints(StompEndpointRegistry registry) { // SockJS के माध्यम से कनेक्शन के लिए एंडपॉइंट (पुराने ब्राउज़रों के लिए फ़ॉलबैक) registry.addEndpoint("/ws") .setAllowedOrigins("*") .withSockJS(); }}यह कोड कनेक्शन पॉइंट, रूटिंग के लिए उपसर्ग और अंतर्निहित संदेश ब्रोकर को कॉन्फ़िगर करता है। STOMP का उपयोग सब्सक्रिप्शन और कतारों के साथ काम को काफी सरल बनाता है।
2. संदेशों की उन्नत प्रोसेसिंग: चैट से शेयर बाजार डेटा तक
अब हम विशिष्ट परिदृश्यों के कार्यान्वयन पर आगे बढ़ते हैं। आइए तीन विशिष्ट मामलों पर विचार करें: समूह चैट, व्यक्तिगत सूचनाएं और डेटा स्ट्रीमिंग।
2.1. संदेश इतिहास के साथ समूह चैट
सरल चैट एक टॉपिक में संदेशों का प्रसारण है। आइए कार्य को जटिल बनाएं: इतिहास को सहेजना और कमरों द्वारा फ़िल्टरिंग जोड़ें।
@Controllerpublic class ChatController {
@Autowired private ChatMessageRepository repository; // JPA रिपॉजिटरी
@MessageMapping("/chat.sendMessage") @SendTo("/topic/chat/{roomId}") public ChatMessage sendMessage(@Payload ChatMessage message, @DestinationVariable String roomId, SimpMessageHeaderAccessor headerAccessor) { // डेटाबेस में सहेजें message.setTimestamp(Instant.now()); repository.save(message); // सत्र से प्रेषक की जानकारी जोड़ें String username = (String) headerAccessor.getSessionAttributes().get("username"); message.setSender(username); return message; }
@MessageMapping("/chat.addUser") @SendTo("/topic/chat/{roomId}") public ChatMessage addUser(@Payload ChatMessage message, @DestinationVariable String roomId, SimpMessageHeaderAccessor headerAccessor) { headerAccessor.getSessionAttributes().put("username", message.getSender()); return message; }}यहां उपयोग किया गया है