परिचय: Swift डेवलपर के लिए WebSocket क्यों महत्वपूर्ण है
आधुनिक मोबाइल और डेस्कटॉप डेवलपमेंट में, उपयोगकर्ता तत्काल अपडेट के आदी हो गए हैं: न्यूज़ फ़ीड बिना रीलोड किए अपडेट होती है, चैट में संवादी की स्थिति real-time में बदलती है, और स्टॉक कोटेशन मिलीसेकंड की देरी से आते हैं। पारंपरिक HTTP अपने अनुरोध-प्रतिक्रिया मॉडल के साथ ऐसे कार्यों के लिए अप्रभावी है - यह सर्वर और डिवाइस की बैटरी पर अतिरिक्त भार डालता है।
WebSocket प्रोटोकॉल मदद के लिए आता है। यह क्लाइंट (Swift पर iOS/macOS एप्लिकेशन) और सर्वर के बीच एक स्थायी द्विदिश कनेक्शन स्थापित करता है। इस लेख में, हम Swift में WebSocket के साथ काम करने के दो मुख्य तरीकों पर चर्चा करेंगे: नेटिव URLSessionWebSocketTask (iOS 13+ / macOS 10.15+) और लोकप्रिय तृतीय-पक्ष लाइब्रेरी Starscream। आप सीखेंगे कि real-time चैट कैसे बनाएं, ऑटो-रीकनेक्ट कैसे सेट करें और त्रुटियों को कैसे संभालें।
Swift में WebSocket की मूल बातें: URLSessionWebSocketTask
iOS 13 और macOS Catalina से शुरू होकर, Apple ने URLSessionWebSocketTask क्लास के माध्यम से WebSocket के लिए अंतर्निहित समर्थन प्रदान किया। यह एक सरल और सुरक्षित तरीका है जिसमें अतिरिक्त निर्भरताएँ स्थापित करने की आवश्यकता नहीं है।
कनेक्शन बनाना और कॉन्फ़िगर करना
शुरू करने के लिए, हम URLSession का एक इंस्टेंस बनाएंगे और कॉन्फ़िगरेशन सेट करेंगे। ध्यान दें: WebSocket के साथ काम करने के लिए, आपको प्रोटोकॉल wss:// (सुरक्षित कनेक्शन) या ws:// (असुरक्षित, केवल डेवलपमेंट के लिए) का उपयोग करना होगा।
import Foundation
class WebSocketManager: NSObject { private var webSocketTask: URLSessionWebSocketTask? private let session: URLSession override init() { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 30 config.waitsForConnectivity = true self.session = URLSession(configuration: config, delegate: nil, delegateQueue: OperationQueue()) super.init() } func connect() { guard let url = URL(string: "wss://echo.websocket.org") else { return } webSocketTask = session.webSocketTask(with: url) webSocketTask?.resume() print("WebSocket कनेक्शन स्थापित हुआ") receiveMessage() }}संदेश भेजना और प्राप्त करना
WebSocket दो प्रकार के संदेशों का समर्थन करता है: स्ट्रिंग (String) और बाइनरी (Data)। आइए भेजने पर विचार करें:
func sendMessage(_ text: String) { let message = URLSessionWebSocketTask.Message.string(text) webSocketTask?.send(message) { error in if let error = error { print("भेजने में त्रुटि: \\(error.localizedDescription)") } else { print("संदेश भेजा गया: \\(text)") } }}संदेश प्राप्त करने के लिए, receive विधि का पुनरावर्ती कॉल लागू करना आवश्यक है:
private func receiveMessage() { webSocketTask?.receive { [weak self] result in switch result { case .success(let message): switch message { case .string(let text): print("टेक्स्ट संदेश प्राप्त हुआ: \\(text)") case .data(let data): print("बाइनरी डेटा प्राप्त हुआ: \\(data.count) बाइट्स") @unknown default: break } // अगले संदेशों को सुनना जारी रखें self?.receiveMessage() case .failure(let error): print("प्राप्त करने में त्रुटि: \\(error.localizedDescription)") // यहाँ पुनः कनेक्शन लागू किया जा सकता है } }}कनेक्शन बंद करना और त्रुटियों को संभालना
WebSocket के साथ सही ढंग से काम समाप्त करना production-एप्लिकेशन का एक महत्वपूर्ण हिस्सा है:
func disconnect() { let closeCode = URLSessionWebSocketTask.CloseCode.normalClosure webSocketTask?.cancel(with: closeCode, reason: nil) p