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

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

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

ابدأ الدورة

مكتبات WebSocket لـ Swift (iOS/macOS): Starscream و URLSessionWebSocketTask



WebSocket هو بروتوكول يوفر اتصالاً ثنائي الاتجاه بالكامل بين العميل والخادم عبر اتصال TCP واحد. في نظام Swift البيئي (iOS/macOS)، هناك طريقتان رئيسيتان للعمل مع WebSocket: التنفيذ الأصلي URLSessionWebSocketTask (متاح منذ iOS 13/macOS 10.15) والمكتبة الخارجية الشهيرة Starscream. كلاهما يسمحان بإنشاء تطبيقات تفاعلية في الوقت الفعلي: الدردشات، خلاصات الأسعار، الألعاب متعددة اللاعبين، إلخ.



التنفيذ الأصلي URLSessionWebSocketTask

مع إصدار iOS 13، أضافت Apple دعمًا مدمجًا لـ WebSocket في إطار عمل Foundation. هذا يلغي الحاجة إلى إضافة تبعيات خارجية إذا كان تطبيقك يستهدف إصدارات نظام تشغيل حديثة.



الإمكانيات الرئيسية:

  • عمل غير متزامن بالكامل عبر async/await أو دوال الاستدعاء
  • إدارة تلقائية لدورة حياة الاتصال
  • دعم closeCode و closeReason للإنهاء الصحيح
  • عمل مدمج مع URLSession (دعم المهلات، سياسات التخزين المؤقت)


مثال على الاتصال وإرسال رسالة:

import Foundation

class WebSocketManager { private var webSocketTask: URLSessionWebSocketTask? private let session = URLSession.shared 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)") @unknown default: fatalError() } // نواصل الاستماع self?.receiveMessage() case .failure(let error): print("خطأ في الاستلام: \\(error)") // ربما إعادة الاتصال } } } func disconnect() { webSocketTask?.cancel(with: .normalClosure, reason: nil) }}


Starscream — مكتبة مرنة ومختبرة

Starscream هي مكتبة WebSocket مفتوحة المصدر لـ Swift، كتبها Dalton Cherry ويدعمها المجتمع. تعمل على iOS و macOS و tvOS و watchOS، بدءًا من الإصدارات الأقدم (iOS 8+). توفر Starscream تحكمًا أكبر في الاتصال وتدعم وظائف إضافية مثل الضغط (permessage-deflate) والرؤوس المخصصة.



التثبيت عبر Swift Package Manager:

// في Package.swift أو عبر Xcode: File → Swift Packages → Add Package Dependency.package(url: "https://github.com/daltoniam/Starscream.git", from: "4.0.0")


الإمكانيات الرئيسية:

  • دعم WebSocketDelegate لجميع الأحداث (الاتصال، استلام البيانات، الأخطاء، قطع الاتصال)
  • إدارة يدوية للإشارات (ping/pong) للحفاظ على الاتصال
  • إمكانية إرسال البيانات الثنائية (Data) والسلاسل النصية (String/UTF-8)
  • دعم SSL/TLS والشهادات الموقعة ذاتيًا

توصيات