مكتبات 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 والشهادات الموقعة ذاتيًا