Swift पर WebSocket: iOS/macOS के लिए उन्नत real-time एप्लिकेशन

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

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

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

Swift पर WebSocket: उन्नत स्तर के real-time एप्लिकेशन बनाना

\n

आधुनिक मोबाइल डेवलपमेंट में, real-time इंटरैक्शन सिर्फ एक विशेषता नहीं, बल्कि एक आवश्यकता बन गई है। वित्तीय कोटेशन, ऑनलाइन गेम, मैसेंजर, दस्तावेज़ों का सह-संपादन - इन सबके लिए क्लाइंट और सर्वर के बीच तत्काल डेटा ट्रांसफर की आवश्यकता होती है। Apple इकोसिस्टम में, Swift और Foundation फ्रेमवर्क WebSocket प्रोटोकॉल के साथ काम करने के लिए शक्तिशाली उपकरण प्रदान करते हैं। इस लेख में, हम उन्नत तकनीकों पर विचार करेंगे: नेटिव URLSessionWebSocketTask से लेकर कस्टम त्रुटि प्रबंधन, मल्टीथ्रेडिंग और प्रदर्शन अनुकूलन तक।

\n\n

1. URLSessionWebSocketTask के माध्यम से WebSocket की नेटिव प्राप्ति (iOS 13+)

\n

iOS 13 से शुरू करके, Apple URLSessionWebSocketTask के माध्यम से WebSocket के लिए अंतर्निहित समर्थन प्रदान करता है। यह पसंदीदा तरीका है, क्योंकि इसमें तृतीय-पक्ष निर्भरताओं की आवश्यकता नहीं होती है और यह कनेक्शन प्रबंधन प्रणाली के साथ गहराई से एकीकृत होता है।

\n\n

1.1. सत्र बनाना और कॉन्फ़िगर करना

\n

शुरू करने के लिए, पुन: कनेक्शन और थ्रेड पूलिंग के समर्थन के साथ एक WebSocket मैनेजर बनाते हैं:

\n
import Foundation\n\nclass WebSocketManager: NSObject {\n    private var webSocketTask: URLSessionWebSocketTask?\n    private var session: URLSession!\n    private let queue = DispatchQueue(label: "com.websocket.queue", qos: .userInitiated)\n    private var isConnected = false\n    \n    override init() {\n        super.init()\n        let config = URLSessionConfiguration.default\n        config.waitsForConnectivity = true\n        config.timeoutIntervalForResource = 300\n        session = URLSession(configuration: config, delegate: self, delegateQueue: nil)\n    }\n    \n    func connect(url: URL) {\n        webSocketTask = session.webSocketTask(with: url)\n        webSocketTask?.resume()\n        receiveMessage()\n    }\n    \n    func disconnect() {\n        webSocketTask?.cancel(with: .normalClosure, reason: nil)\n        isConnected = false\n    }\n}
\n\n

1.2. टाइपिंग के साथ उन्नत संदेश प्रबंधन

\n

संदेश प्रकारों के लिए एक enum बनाते हैं और पार्सिंग लागू करते हैं:

\n
enum WebSocketMessage {\n    case text(String)\n    case data(Data)\n    case ping\n    case pong\n    case error(Error)\n}\n\nextension WebSocketManager: URLSessionWebSocketDelegate {\n    func urlSession(_ session: URLSession, webSocketTask: URLSessionWebSocketTask, didOpenWithProtocol protocol: String?) {\n        isConnected = true\n        print("WebSocket connected")\n    }\n    \n    func urlSession(_ session: URLSession, webSocketTask: URLSessionWebSocketTask, didCloseWith closeCode: URLSessionWebSocketTask.CloseCode, reason: Data?) {\n        isConnected = false\n        print("WebSocket closed: \\(closeCode)")\n        // 5 सेकंड के बाद स्वचालित पुन: कनेक्शन\n        DispatchQueue.global().asyncAfter(deadline: .now() + 5) { [weak self] in\n            self?.reconnect()\n        }\n    }\n    \n    private func receiveMessage() {\n        webSocketTask?.receive { [weak self] result in\n            switch result {\n            case .success(let message):\n                self?.handleMessage(message)\n                self?.receiveMessage() // चक्रीय प्राप्ति\n            case .failure(let error):\n                self?.handleError(error)\n            }\n        }\n    }\n    \n    private func handleMessage(_ message: URLSessionWebSocketTask.Message) {\n        switch message {\n        case .string(let text):\n            processText(text)\n        case .data(let data):\n            processData(data)\n        @unknown default:\n            break\n        }\n    }\n}
\n\n

2. मल्टीथ्रेडिंग और प्रदर्शन के साथ उन्नत कार्य

\n

Real-time एप्लिकेशन को उच्च प्रदर्शन की आवश्यकता होती है। आइए प्रमुख अनुकूलन पर विचार करें।

\n\n

2.1. थ्रेड-सुरक्षित संदेश कतार

\n
class ThreadSafeMessageQueue {\n    private var queue = [WebSocketMessage]()\n                

ब्लॉग

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