مكتبات WebSocket الخاصة بـ Swift (iOS/macOS): Starscream و URLSessionWebSocketTask
WebSocket هو بروتوكول يوفر اتصالاً ثنائي الاتجاه مستمرًا بين العميل (تطبيق iOS/macOS) والخادم. على عكس HTTP، بعد إنشاء الاتصال، يمكن نقل البيانات في الوقت الفعلي دون الحاجة إلى طلبات متكررة. بالنسبة لـ Swift، هناك طريقتان رئيسيتان: استخدام URLSessionWebSocketTask المدمج (متاح من iOS 13/macOS 10.15) والمكتبة الخارجية Starscream (التي تدعم الإصدارات الأقدم وتوفر وظائف متقدمة).
1. URLSessionWebSocketTask — WebSocket الأصلي في Swift
بدءًا من iOS 13 و macOS 10.15، أضافت Apple دعم WebSocket مباشرة في URLSession. هذا يعني أنه للسيناريوهات الأساسية، لا يلزم تثبيت تبعيات إضافية.
مثال على الاتصال وإرسال رسالة
import Foundation
class WebSocketManager: NSObject { private var webSocketTask: URLSessionWebSocketTask? private let session = URLSession(configuration: .default) func connect() { guard let url = URL(string: "wss://echo.websocket.org") else { return } webSocketTask = session.webSocketTask(with: url) webSocketTask?.resume() receiveMessage() } func sendMessage(_ text: String) { let message = URLSessionWebSocketTask.Message.string(text) webSocketTask?.send(message) { error in if let error = error { print("خطأ في الإرسال: \\(error.localizedDescription)") } } } 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)") } } } func disconnect() { webSocketTask?.cancel(with: .normalClosure, reason: nil) }}مزايا URLSessionWebSocketTask
- بدون تبعيات — كل شيء موجود بالفعل في النظام.
- تكامل أصلي مع المهام الخلفية و App Transport Security.
- دعم من Apple وتحديثات مع نظام التشغيل.
العيوب
- الحد الأدنى للإصدار iOS 13 / macOS 10.15.
- عدم وجود دعم مدمج لإعادة الاتصال و ping/pong (يلزم تنفيذها يدويًا).
- مرونة أقل في الإعدادات.
2. Starscream — مكتبة WebSocket قوية ومرنة لـ Swift
Starscream هي أشهر مكتبة WebSocket خارجية لـ Swift. تدعم iOS 8+ و macOS 10.10+ بالإضافة إلى watchOS و tvOS. توفر Starscream آلية إعادة اتصال مدمجة، و ping/pong تلقائي، ودعم SSL/TLS.
التثبيت عبر Swift Package Manager
// في Package.swift أو عبر Xcode: File → Add Packages...// الرابط: https://github.com/daltoniam/Starscream.git// الإصدار: من 4.0.0 فما فوقمثال على استخدام Starscream
import Starscream
class StarscreamManager: WebSocketDelegate { var socket: WebSocket? func setupConnection() { var request = URLRequest(url: URL(string: "wss://echo.websocket.org")!) request.timeoutInterval = 5 socket = WebSocket(request: request) socket?.delegate = self socket?.connect() }\ أيضاً في المكتبة
تحليل HTML في C++: المكتبات والأمثلة للعمل مع DOM و XPath
إرسال البريد الإلكتروني باستخدام Kotlin: المكتبات والأمثلة وإعداد SMTP
ORM لـ Rust: مقارنة وأمثلة لـ Diesel، SeaORM، SQLx