अनंत पोलिंग को भूल जाइए: Kotlin में सर्वर-सेंट इवेंट्स से मिलिए
\n\nकल्पना करें: आप एक शेयर बाजार टर्मिनल खोलते हैं, और कीमतें अपने आप अपडेट हो जाती हैं। या आप किसी साइट के एडमिन पैनल में जाते हैं, और वहां ऑनलाइन उपयोगकर्ताओं की संख्या की लाइव फीड होती है। कोई "रिफ्रेश" बटन नहीं, सर्वर पर कोई अंतहीन अनुरोध नहीं। बस डेटा की एक धारा, रीयल-टाइम में बहती हुई।
\n\nवेब डेवलपमेंट की दुनिया में, इसके लिए सर्वर-सेंट इवेंट्स (SSE) जिम्मेदार हैं - एक प्रोटोकॉल जो सर्वर को एक HTTP कनेक्शन के माध्यम से क्लाइंट को स्वचालित रूप से डेटा भेजने की अनुमति देता है। और आज मैं दिखाऊंगा कि Ktor फ्रेमवर्क का उपयोग करके Kotlin में SSE को कैसे लागू किया जाए। यह सूखा सिद्धांत नहीं होगा, बल्कि सर्वर से क्लाइंट तक एक पूर्ण कार्यशील उदाहरण होगा।
\n\nसर्वर-सेंट इवेंट्स क्या हैं और ये क्यों बेहतरीन हैं?
\n\nबहुत पहले, ताजा डेटा प्राप्त करने के लिए, डेवलपर्स पोलिंग का उपयोग करते थे। क्लाइंट हर N सेकंड में सर्वर पर दस्तक देता था: "क्या कोई खबर है?" सर्वर जवाब देता था: "नहीं"। और यह चक्र चलता रहता था। यह बेहद अक्षम है: 99% अनुरोध खाली होते हैं, और सर्वर अनावश्यक कनेक्शनों को संभालने में संसाधन खर्च करता है।
\n\nSSE इस समस्या को मौलिक रूप से हल करता है: क्लाइंट एक कनेक्शन खोलता है, और सर्वर स्वयं डेटा भेजता है जब वह उपलब्ध होता है। यह समाचारों की सदस्यता लेने जैसा है - आप बस प्रतीक्षा करते हैं, और आपको ताजा अंक मिलता है।
\n\nKotlin में सर्वर-सेंट इवेंट्स के लाभ:
\n- \n
- सरलता - यह सामान्य HTTP पर काम करता है, क्लाइंट पर अतिरिक्त लाइब्रेरी की आवश्यकता नहीं होती (ब्राउज़र में अंतर्निहित EventSource के अलावा)। \n
- स्वचालित पुनर्स्थापना - यदि कनेक्शन टूट जाता है, तो ब्राउज़र स्वयं पुनः कनेक्ट हो जाता है। \n
- संसाधनों की बचत - दर्जनों के बजाय एक कनेक्शन। \n
- Kotlin में मूल समर्थन - Ktor और कोरूटीन के साथ SSE सर्वर लिखना एक आनंद है। \n
मुख्य नुकसान? SSE एक एकतरफा चैनल है (केवल सर्वर से क्लाइंट तक)। यदि दोनों दिशाओं में संचार की आवश्यकता है, तो WebSocket की ओर देखें। लेकिन सूचनाओं, समाचार फीड, कीमतों, निगरानी के लिए - SSE आदर्श है।
\n\nअपने Kotlin प्रोजेक्ट में SSE का उपयोग कब करें?
\n\n- \n
- सूचना फीड - नए संदेश, टिप्पणियां, लाइक। \n
- निगरानी और लॉग - रीयल-टाइम में सर्वर से लॉग स्ट्रीमिंग। \n
- शेयर बाजार डेटा - मुद्रा दरों, शेयरों, क्रिप्टोकरेंसी का अपडेट। \n
- कार्य प्रगति - फ़ाइल अपलोड या डेटा प्रोसेसिंग पर रिपोर्ट। \n
- चेतावनी प्रणाली - आपातकालीन संकेत, उपकरण स्थितियां। \n
यदि आप बिना सिरदर्द के सर्वर से क्लाइंट तक अपडेट भेजने का तरीका ढूंढ रहे हैं - SSE Kotlin आपकी पसंद है। चलिए कोड की ओर बढ़ते हैं।
\n\nप्रोजेक्ट सेटअप: Ktor + SSE
\n\nशुरुआत करने के लिए, एक नया Ktor प्रोजेक्ट बनाएं। मैं Gradle Kotlin DSL का उपयोग करूंगा। build.gradle.kts में निर्भरताएं जोड़ें:
val ktor_version = "2.3.7"\n\ndependencies {\n implementation("io.ktor:ktor-server-core:$ktor_version")\n implementation("io.ktor:ktor-server-netty:$ktor_version")\n implementation("io.ktor:ktor-server-content-negotiation:$ktor_version")\n implementation("io.ktor:ktor-serialization-kotlinx-json:$ktor_version")\n implementation("ch.qos.logback:logback-classic:1.4.14")\n implementation("io.ktor:ktor-server-cors:$ktor_version")\n}\n\nध्यान दें: SSE के लिए हमें अलग लाइब्रेरी की आवश्यकता नहीं है - Ktor कोरूटीन के माध्यम से बॉक्स से बाहर स्ट्रीमिंग डेटा ट्रांसफर का समर्थन करता है।
\n\nSSE एंडपॉइंट बनाना
\n\nअब सबसे दिलचस्प भाग - एक सर्वर लिखें जो हर 2 सेकंड में क्लाइंट को इवेंट भेजेगा। यह शेयर बाजार की कीमतों का अनुकरण होगा।
\n\nimport io.ktor.server.application.*\nimport io.ktor.server.engine.*\nimport io.ktor.server.netty.*\nimport io.ktor.server.response.*\nimport io.ktor.server.routing.*\nimport kotlinx.co