Java पर WebSocket का परिचय: सिद्धांत से real-time एप्लिकेशन तक
आधुनिक वेब एप्लिकेशनों को तेजी से क्लाइंट और सर्वर के बीच तत्काल डेटा आदान-प्रदान की आवश्यकता होती है। पारंपरिक HTTP अपने "अनुरोध-प्रतिक्रिया" मॉडल के साथ उन कार्यों के लिए उपयुक्त नहीं है जहां निरंतर संचार की आवश्यकता होती है: ऑनलाइन चैट, स्टॉक कोट्स, मल्टीप्लेयर गेम या मॉनिटरिंग पैनल। यहीं पर WebSocket प्रोटोकॉल मदद करता है, जो एक स्थायी द्विदिश कनेक्शन स्थापित करता है। इस लेख में, हम Java पर WebSocket को लागू करने का तरीका समझेंगे, एक सरल चैट सर्वर और क्लाइंट बनाएंगे, और production वातावरण के लिए सर्वोत्तम प्रथाओं पर विचार करेंगे।
WebSocket क्या है और Java क्यों?
WebSocket एक प्रोटोकॉल है जो TCP के ऊपर काम करता है, जो HTTP हेडर के ओवरहेड के बिना वास्तविक समय में संदेशों के आदान-प्रदान की अनुमति देता है। हैंडशेक (HTTP से WebSocket में अपग्रेड) के बाद, सर्वर और क्लाइंट किसी भी समय एक-दूसरे को डेटा भेज सकते हैं। Java WebSocket को लागू करने के लिए एक उत्कृष्ट विकल्प है क्योंकि:
- अंतर्निहित समर्थन JSR 356 के माध्यम से Jakarta EE (पूर्व में Java EE) में।
- उच्च प्रदर्शन और मल्टीथ्रेडिंग।
- फ्रेमवर्क पारिस्थितिकी तंत्र (Spring, Netty, Tyrus) जो विकास को सरल बनाता है।
Polling और SSE (Server-Sent Events) के विपरीत, WebSocket बिना देरी के पूर्ण द्विदिश संचार प्रदान करता है।
Java पर WebSocket एप्लिकेशन की आर्किटेक्चर
एक विशिष्ट real-time Java एप्लिकेशन में तीन घटक शामिल होते हैं:
- WebSocket सर्वर — कनेक्शन स्वीकार करता है, सत्र प्रबंधित करता है, आने वाले संदेशों को संसाधित करता है।
- WebSocket क्लाइंट — ब्राउज़र (JavaScript) या एक मूल Java एप्लिकेशन जो कनेक्शन शुरू करता है।
- व्यावसायिक तर्क — संदेश प्रसंस्करण, प्रसारण, डेटाबेस में सहेजना।
Jakarta WebSocket एनोटेशन और JavaScript क्लाइंट का उपयोग करके सर्वर कार्यान्वयन पर विचार करें।
सर्वर पक्ष: @ServerEndpoint एनोटेशन
सर्वर बनाने के लिए, बस jakarta.websocket-api (या पुराने संस्करणों के लिए javax.websocket-api) निर्भरता जोड़ें। एक सरल इको सर्वर का उदाहरण:
import jakarta.websocket.*;import jakarta.websocket.server.ServerEndpoint;import java.io.IOException;
@ServerEndpoint("/echo")public class EchoEndpoint {
@OnOpen public void onOpen(Session session) { System.out.println("नया कनेक्शन: " + session.getId()); }
@OnMessage public void onMessage(String message, Session session) throws IOException { System.out.println("प्राप्त: " + message); // वापस भेजें (इको) session.getBasicRemote().sendText("इको: " + message); }
@OnClose public void onClose(Session session, CloseReason reason) { System.out.println("कनेक्शन बंद: " + reason.getReasonPhrase()); }
@OnError public void onError(Session session, Throwable error) { error.printStackTrace(); }}
सर्वर किसी भी Servlet कंटेनर (Tomcat, Jetty, GlassFish) में तैनात किया जाता है। Spring Boot के लिए, @ServerEndpoint का उपयोग SpringBootApplication के साथ करें।
क्लाइंट पक्ष: JavaScript
ब्राउज़र क्लाइंट मानक WebSocket API के माध्यम से कनेक्ट होता है:
const socket = new WebSocket("ws://localhost:8080/echo");
socket.onopen = function(event) { console.log("कनेक्शन स्थापित"); socket.send("नमस्ते, सर्वर!");};
socket.onmessage = function(event) { console.log("सर्वर से संदेश: " + event.data);};
socket.onclose = function(event) { console.log("कनेक्शन बंद");};
ध्यान दें: URL ws:// (या सुरक्षित कनेक्शन के लिए wss://) से शुरू होता है।
Java पर real-time चैट बनाना
अब हम एक पूर्ण