Swift में Server-Sent Events: WebSocket के बिना वास्तविक डेटा स्ट्रीमिंग

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

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

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

परिचय: SSE आपका नया सबसे अच्छा दोस्त क्यों है

\n\n

कल्पना करें: आप एक आरामदायक कैफे में बैठे हैं, कॉफी पी रहे हैं, और आपका iOS ऐप बैकग्राउंड में ताज़ा मुद्रा दरें, नए संदेशों की सूचनाएं या IoT डिवाइस के सेंसर डेटा प्राप्त कर रहा है। और यह सब — सर्वर पर लगातार पिंग किए बिना, बैटरी खत्म किए बिना और WebSocket जैसे जटिल प्रोटोकॉल के बिना। मिलिए: Swift में Server-Sent Events (SSE) — एक ऐसी तकनीक जो डेटा स्ट्रीमिंग को इतना सरल बना देती है कि आपको आश्चर्य होगा कि आपने इसका उपयोग पहले क्यों नहीं किया।

\n\n

इस लेख में, हम समझेंगे कि iOS, macOS, watchOS और tvOS के लिए Swift में Server-Sent Events को कैसे लागू करें। आप जानेंगे कि SSE अक्सर WebSocket से अधिक सुविधाजनक क्यों होता है, अपना SSE क्लाइंट स्क्रैच से कैसे लिखें और शुरुआती लोगों के लिए क्या खतरे हैं। चलिए शुरू करते हैं!

\n\n

Server-Sent Events क्या है और इसकी आवश्यकता क्यों है?

\n\n

Server-Sent Events एक W3C मानक है जो सर्वर को एक HTTP कनेक्शन पर क्लाइंट को डेटा भेजने की अनुमति देता है। WebSocket के विपरीत, SSE केवल एक दिशा (सर्वर → क्लाइंट) में काम करता है, लेकिन यही इसे उन कार्यों के लिए आदर्श बनाता है जहां द्विदिश संचार की आवश्यकता नहीं होती है।

\n\n

SSE को कब चुनें, WebSocket को नहीं?

\n
    \n
  • सूचनाएं और अलर्ट — सर्वर घटनाएं भेजता है, क्लाइंट केवल पढ़ता है।
  • \n
  • स्ट्रीमिंग डेटा — स्टॉक कोट्स, सर्वर मेट्रिक्स, GPS ट्रैकिंग।
  • \n
  • समाचार फ़ीड — Twitter-जैसे अपडेट।
  • \n
  • निष्पादन प्रगति — फ़ाइल अपलोड, वीडियो प्रोसेसिंग।
  • \n
\n\n

WebSocket पर SSE का मुख्य लाभ सरलता है। आपको एक अलग प्रोटोकॉल की आवश्यकता नहीं है, सामान्य HTTP पर्याप्त है। और इसका मतलब है कि Python, Node.js या Go पर कोई भी सर्वर बिना अतिरिक्त लाइब्रेरी के आपके Swift ऐप को घटनाएं भेज सकता है।

\n\n

SSE कैसे काम करता है: प्रोटोकॉल को समझना

\n\n

सर्वर हेडर Content-Type: text/event-stream के साथ एक सामान्य HTTP प्रतिक्रिया भेजता है। डेटा इस प्रकार स्वरूपित होता है:

\n\n
event: message\ndata: {"text": "नमस्ते, दुनिया!"}\nid: 42\n\nevent: update\ndata: {"count": 10}\nretry: 3000\n
\n\n

मुख्य फ़ील्ड:

\n
    \n
  • event — घटना का प्रकार (वैकल्पिक)।
  • \n
  • data — घटना का मुख्य भाग (बहु-पंक्ति हो सकता है)।
  • \n
  • id — कनेक्शन बहाल करने के लिए पहचानकर्ता।
  • \n
  • retry — त्रुटि पर पुनः कनेक्ट करने से पहले मिलीसेकंड में समय।
  • \n
\n\n

प्रत्येक घटना दो नई पंक्ति वर्णों \\n\\n द्वारा अलग की जाती है। सरल है, है ना?

\n\n

Swift में SSE क्लाइंट बनाना: सरल से जटिल तक

\n\n

Foundation मानक लाइब्रेरी में SSE के लिए कोई तैयार क्लास नहीं है, लेकिन अपना खुद का बनाना 15 मिनट का काम है। हम स्ट्रीमिंग डेटा को संभालने के लिए डेलिगेट के साथ URLSession का उपयोग करते हैं।

\n\n

चरण 1: बेसिक EventSource क्लास

\n\n
import Foundation\n\nfinal class EventSource: NSObject {\n    private var url: URL\n    private var session: URLSession?\n    private var task: URLSessionDataTask?\n    private var currentData = Data()\n    private var lastEventId: String?\n    \n    var onEvent: ((String, String) -> Void)? // event, data\n    var onError: ((Error) -> Void)?\n    var onOpen: (() -> Void)?\n    \n    init(url: URL) {\n        self.url = url\n        super.init()\n    }\n    \n    func connect() {\n        var request = URLRequest(url: url)\n        request.setValue("text/event-stream", forHTTPHeaderField: "Accept")\n        if let lastId = lastEventId {\n            request.setValue(lastId, forHTTPHeaderField: "Last-Event-ID")\n        }\n        \n        let config = URLSessionConfiguration.default\n        config.timeoutIntervalForRequest = TimeInterval(INT_MAX)\n        config.timeoutIntervalForResource = TimeInterval(INT_MAX)\n        \n        session = URLSession(configuration: config, delegate: self, delegateQueue: nil)\n        task = session?.dataTask(with: request)\n        task?.resume()\n    }\n    \                

ब्लॉग

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