Starscream — Swift के लिए WebSocket लाइब्रेरी (iOS/macOS)
Starscream Apple प्लेटफार्मों पर WebSocket प्रोटोकॉल के साथ काम करने के लिए एक हल्की लेकिन शक्तिशाली लाइब्रेरी है। यह पूरी तरह से Swift में लिखी गई है, इसकी कोई बाहरी निर्भरता नहीं है और यह iOS, macOS, tvOS और watchOS को सपोर्ट करती है। यदि आपको मोबाइल ऐप और सर्वर (चैट, सूचनाएं, ऑनलाइन गेम) के बीच रियल-टाइम द्विदिश संचार व्यवस्थित करने की आवश्यकता है, तो Starscream एक उत्कृष्ट विकल्प होगा।
मुख्य विशेषताएं
- RFC 6455 (WebSocket प्रोटोकॉल) का पूर्ण समर्थन।
- सुरक्षित कनेक्शन
wss://और सामान्यws://के माध्यम से काम करना। - कनेक्शन टूटने पर स्वचालित पुनः कनेक्शन।
- फ्रेम का समर्थन: टेक्स्ट, बाइनरी डेटा (Data), पिंग/पोंग।
- CocoaPods, Swift Package Manager या Carthage के माध्यम से सरल एकीकरण।
- Combine (iOS 13+) और Swift Concurrency (async/await) के साथ संगतता।
Swift Package Manager के माध्यम से स्थापना (अनुशंसित)
Xcode में पैकेज जोड़ें: File → Add Packages और रिपॉजिटरी URL डालें:
https://github.com/daltoniam/Starscream.gitसंस्करण चुनें (नवीनतम स्थिर) और अपने टार्गेट में जोड़ें।
कनेक्शन का मूल उदाहरण
आइए एक सरल WebSocket क्लाइंट बनाएं जो सर्वर से कनेक्ट होता है और प्राप्त संदेशों को प्रदर्शित करता है।
import Starscream
class WebSocketManager { var socket: WebSocket? func connect() { var request = URLRequest(url: URL(string: "wss://echo.websocket.org")!) request.timeoutInterval = 5 socket = WebSocket(request: request) socket?.delegate = self socket?.connect() }}
extension WebSocketManager: WebSocketDelegate { func didReceive(event: WebSocketEvent, client: WebSocket) { switch event { case .connected(let headers): print("कनेक्टेड! हेडर: \\(headers)") case .disconnected(let reason, let code): print("डिस्कनेक्ट: \\(reason) (कोड: \\(code))") case .text(let string): print("टेक्स्ट प्राप्त: \\(string)") case .binary(let data): print("बाइनरी डेटा प्राप्त: \\(data.count) बाइट्स") case .ping(let data): print("पिंग: \\(data?.hexString ?? "कोई डेटा नहीं")") case .pong(let data): print("पोंग: \\(data?.hexString ?? "कोई डेटा नहीं")") case .viabilityChanged(let isViable): print("कनेक्शन सक्रिय: \\(isViable)") case .reconnectSuggested(let shouldReconnect): print("पुनः कनेक्शन सुझाया गया: \\(shouldReconnect)") case .cancelled: print("कनेक्शन रद्द किया गया") case .error(let error): print("त्रुटि: \\(error?.localizedDescription ?? "अज्ञात त्रुटि")") } }}डेटा भेजना
Starscream टेक्स्ट स्ट्रिंग और बाइनरी डेटा दोनों भेजने की अनुमति देता है। JSON भेजने का उदाहरण:
func sendMessage(text: String) { let message: [String: Any] = [ "type": "chat", "content": text, "timestamp": Int(Date().timeIntervalSince1970) ] if let jsonData = try? JSONSerialization.data(withJSONObject: message, options: []), let jsonString = String(data: jsonData, encoding: .utf8) { socket?.write(string: jsonString) }}
// बाइनरी फ़ाइल भेजना (उदाहरण: इमेज)func sendImage(data: Data) { socket?.write(data: data)}Combine के साथ काम करना (iOS 13+)
रिएक्टिव प्रोग्रामिंग के लिए, Starscream Publisher प्रदान करता है:
import Combine
class CombineViewModel: ObservableObject { @Published var lastMessage: String = "" private var socket: WebSocket? private var cancellables = Set<AnyCancellable>() func setup() { var req