لماذا WebSockets هي القوة الخارقة لمطور Swift؟
\n\nتخيل: تفتح تطبيق المراسلة، وتصل الرسائل فوراً. لا تحديثات لا نهائية للصفحة، ولا "اسحب للتحديث". هذا هو سحر الزمن الحقيقي، وفي Swift يتم تحقيقه باستخدام WebSockets. إذا كنت لا تزال تستخدم طلبات HTTP فقط، فأنت تفوّت عالماً كاملاً من الإمكانيات: الدردشات المباشرة، أسعار الأسهم، الإشعارات الحية، الألعاب متعددة اللاعبين.
\n\nفي هذا المقال، سنشرح كيفية إضافة WebSockets إلى تطبيق Swift الخاص بك. لا كلام زائد — فقط كود يمكنك نسخه وتشغيله. في النهاية، ستتمكن من كتابة أول دردشة فورية لك في أقل من ساعة. هيا بنا!
\n\nما هي WebSockets ولماذا هي أفضل من REST API؟
\n\nWebSockets هو بروتوكول اتصال ثنائي الاتجاه بين العميل والخادم. على عكس REST، حيث يقوم العميل باستمرار "بسؤال" الخادم، يُنشئ WebSocket اتصالاً دائماً. يمكن للخادم نفسه إرسال البيانات بمجرد ظهورها. الفرق يشبه الفرق بين الاتصال بصديق باستمرار "هل وصلت؟" وبين فتح الباب والسماح له بالدخول.
\n\nلمطور Swift، الميزة الرئيسية هي توفير البيانات والموارد. بدلاً من عشرات طلبات HTTP في الدقيقة — اتصال واحد. مثالي لتطبيقات التداول، الألعاب عبر الإنترنت، مراقبة الأنظمة.
\n\nمتى يجب استخدام WebSockets في iOS؟
\n- \n
- الدردشات المباشرة — يجب أن تصل الرسائل فوراً. \n
- أسعار الأسهم — السعر يتغير كل ثانية. \n
- الألعاب متعددة اللاعبين — مزامنة إجراءات اللاعبين. \n
- الإشعارات في الزمن الحقيقي — إعجاب جديد، طلب، رسالة. \n
- تطبيقات IoT — بيانات من أجهزة الاستشعار تتدفق باستمرار. \n
لكن لا تستخدم WebSockets في كل مكان. إذا كنت تحتاج فقط لتحميل قائمة منتجات — طلب HTTP GET العادي سيكون أفضل. WebSocket يكون مبرراً عندما تتغير البيانات أكثر من مرة كل 10 ثوانٍ.
\n\nإعداد WebSocket في Swift: من الصفر إلى أول اتصال
\n\nفي Swift، هناك دعم مدمج لـ WebSockets — فئة URLSessionWebSocketTask. لا حاجة لأي مكتبات خارجية. دعنا نكتب عميلاً بسيطاً.
الخطوة 1: إنشاء اتصال WebSocket
\n\nimport Foundation\n\nclass WebSocketManager: NSObject {\n private var webSocketTask: URLSessionWebSocketTask?\n private let session: URLSession\n \n override init() {\n self.session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue())\n super.init()\n }\n \n func connect(to url: URL) {\n webSocketTask = session.webSocketTask(with: url)\n webSocketTask?.resume()\n print("تم إنشاء اتصال WebSocket")\n receiveMessage()\n }\n \n func disconnect() {\n webSocketTask?.cancel(with: .normalClosure, reason: nil)\n print("تم إغلاق الاتصال")\n }\n}\n\n\nهذا غلاف أساسي. الطريقة resume() تبدأ الاتصال — بدونها لن يحدث شيء. تذكر هذه القاعدة: استدعِ resume() دائماً.
الخطوة 2: إرسال واستقبال الرسائل
\n\nextension WebSocketManager {\n func sendMessage(_ text: String) {\n let message = URLSessionWebSocketTask.Message.string(text)\n webSocketTask?.send(message) { error in\n if let error = error {\n print("خطأ في الإرسال: \\(error.localizedDescription)")\n }\n }\n }\n \n private func receiveMessage() {\n webSocketTask?.receive { [weak self] result in\n switch result {\n case .success(let message):\n switch message {\n case .string(let text):\n print("تم استلام رسالة: \\(text)")\n