مكتبات WebSocket الخاصة بـ Swift: Starscream و URLSessionWebSocketTask

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مكتبات 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() }\

توصيات