Java में Long Polling बनाम WebSocket: रियल-टाइम के लिए क्या चुनें?

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Java में Long Polling बनाम WebSocket: रियल-टाइम तकनीकों का मुकाबला

\n\n

कल्पना करें: आप Java में एक चैट, शेयर बाजार टर्मिनल या ऑनलाइन गेम विकसित कर रहे हैं। उपयोगकर्ता अपडेट की प्रतीक्षा कर रहा है, और सर्वर चुप है। डेटा को तुरंत कैसे आने दें? पहले एक ही रास्ता था — Long Polling। आज मैदान में WebSocket है। लेकिन असली मुकाबले में कौन जीतेगा?

\n\n

इस लेख में हम केवल अवधारणाओं की तुलना नहीं करेंगे। हम Java में लाइव कोड लिखेंगे, दोनों तकनीकों के अंदरूनी भाग देखेंगे और तय करेंगे कि आपके अगले प्रोजेक्ट में क्या उपयोग करना है। रिंग में आपका स्वागत है!

\n\n

Long Polling क्या है (और यह 'पोलिंग' क्यों नहीं है)?

\n\n

क्लासिक HTTP एक पत्र की तरह है: अनुरोध भेजा → उत्तर मिला। अगर सर्वर के पास कहने को कुछ नहीं है, तो वह खाली उत्तर लौटाता है। क्लाइंट को हर N सेकंड में फिर से पूछना पड़ता है। यह Short Polling है — एक बंद रास्ता।

\n\n

Long Polling अधिक चालाकी से काम करता है। क्लाइंट अनुरोध भेजता है, और सर्वर... सो जाता है। वह कनेक्शन को तब तक खुला रखता है जब तक कोई नई घटना न हो (या टाइमआउट समाप्त न हो)। जैसे ही घटना होती है — सर्वर जागता है और उत्तर भेजता है। क्लाइंट तुरंत एक नया Long Polling अनुरोध बनाता है। चक्र बंद हो जाता है।

\n\n

Java में Long Polling: एक सरल कार्यान्वयन

\n\n

मान लीजिए कि हम शुद्ध Servlet API (Spring के बिना, इसे स्पष्ट करने के लिए) पर एक अधिसूचना सर्वर लिख रहे हैं। Long Polling के लिए हमें एसिंक्रोनस प्रोसेसिंग (AsyncContext) की आवश्यकता होगी, अन्यथा सर्वर सभी थ्रेड्स को ब्लॉक कर देगा।

\n\n
import javax.servlet.AsyncContext;\nimport javax.servlet.annotation.WebServlet;\nimport javax.servlet.http.HttpServlet;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.io.IOException;\nimport java.util.Queue;\nimport java.util.concurrent.ConcurrentLinkedQueue;\n\n@WebServlet(urlPatterns = "/long-poll", asyncSupported = true)\npublic class LongPollingServlet extends HttpServlet {\n\n    // "सोते" कनेक्शनों को संग्रहीत करने के लिए कतार\n    private static final Queue<AsyncContext> WAITING_CLIENTS = new ConcurrentLinkedQueue<>();\n\n    @Override\n    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {\n        AsyncContext asyncContext = req.startAsync();\n        asyncContext.setTimeout(30_000); // 30 सेकंड का टाइमआउट\n\n        // संदर्भ सहेजें\n        WAITING_CLIENTS.add(asyncContext);\n\n        // यदि टाइमआउट समाप्त हो जाता है — खाली उत्तर लौटाएं\n        asyncContext.addListener(new javax.servlet.AsyncListener() {\n            public void onTimeout(javax.servlet.AsyncEvent event) {\n                WAITING_CLIENTS.remove(asyncContext);\n                try {\n                    HttpServletResponse response = (HttpServletResponse) event.getAsyncContext().getResponse();\n                    response.getWriter().write("timeout");\n                    response.setStatus(HttpServletResponse.SC_OK);\n                    asyncContext.complete();\n                } catch (IOException e) { e.printStackTrace(); }\n            }\n            // अन्य श्रोता विधियों को संक्षिप्तता के लिए छोड़ दिया गया है\n        });\n    }\n\n    // यह विधि तब कहा जाता है जब कोई नई घटना होती है\n    public static void sendEventToClients(String message) {\n        for (AsyncContext ctx : WAITING_CLIENTS) {\n            try {\n                HttpServletResponse response = (HttpServletResponse) ctx.getResponse();\n                response.getWriter().write(message);\n                response.setStatus(HttpServletResponse.SC_OK);\n                ctx.complete();\n                WAITING_CLIENTS.remove(ctx);\n            } catch (IOException e) { e.printStackTrace(); }\n        }\n    }\n}
\n\n

यह कैसे काम करता है:

\n
    \n
  • क्लाइंट /long-poll पर GET अनुरोध करता है।
  • \n
  • सर्वर अनुरोध को एसिंक्रोनस मोड में बदलता है और "सो जाता है" (प्रतीक्षा करता है)।
  • \n
  • जब कोई संदेश आता है (विधि sendEventToClien

ब्लॉग

पुस्तक अनुशंसाएँ