WebSockets في Swift: بناء تطبيقات الزمن الحقيقي في ساعة

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

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

ابدأ الدورة

لماذا WebSockets هي القوة الخارقة لمطور Swift؟

\n\n

تخيل: تفتح تطبيق المراسلة، وتصل الرسائل فوراً. لا تحديثات لا نهائية للصفحة، ولا "اسحب للتحديث". هذا هو سحر الزمن الحقيقي، وفي Swift يتم تحقيقه باستخدام WebSockets. إذا كنت لا تزال تستخدم طلبات HTTP فقط، فأنت تفوّت عالماً كاملاً من الإمكانيات: الدردشات المباشرة، أسعار الأسهم، الإشعارات الحية، الألعاب متعددة اللاعبين.

\n\n

في هذا المقال، سنشرح كيفية إضافة WebSockets إلى تطبيق Swift الخاص بك. لا كلام زائد — فقط كود يمكنك نسخه وتشغيله. في النهاية، ستتمكن من كتابة أول دردشة فورية لك في أقل من ساعة. هيا بنا!

\n\n

ما هي WebSockets ولماذا هي أفضل من REST API؟

\n\n

WebSockets هو بروتوكول اتصال ثنائي الاتجاه بين العميل والخادم. على عكس REST، حيث يقوم العميل باستمرار "بسؤال" الخادم، يُنشئ WebSocket اتصالاً دائماً. يمكن للخادم نفسه إرسال البيانات بمجرد ظهورها. الفرق يشبه الفرق بين الاتصال بصديق باستمرار "هل وصلت؟" وبين فتح الباب والسماح له بالدخول.

\n\n

لمطور Swift، الميزة الرئيسية هي توفير البيانات والموارد. بدلاً من عشرات طلبات HTTP في الدقيقة — اتصال واحد. مثالي لتطبيقات التداول، الألعاب عبر الإنترنت، مراقبة الأنظمة.

\n\n

متى يجب استخدام WebSockets في iOS؟

\n
    \n
  • الدردشات المباشرة — يجب أن تصل الرسائل فوراً.
  • \n
  • أسعار الأسهم — السعر يتغير كل ثانية.
  • \n
  • الألعاب متعددة اللاعبين — مزامنة إجراءات اللاعبين.
  • \n
  • الإشعارات في الزمن الحقيقي — إعجاب جديد، طلب، رسالة.
  • \n
  • تطبيقات IoT — بيانات من أجهزة الاستشعار تتدفق باستمرار.
  • \n
\n\n

لكن لا تستخدم WebSockets في كل مكان. إذا كنت تحتاج فقط لتحميل قائمة منتجات — طلب HTTP GET العادي سيكون أفضل. WebSocket يكون مبرراً عندما تتغير البيانات أكثر من مرة كل 10 ثوانٍ.

\n\n

إعداد WebSocket في Swift: من الصفر إلى أول اتصال

\n\n

في Swift، هناك دعم مدمج لـ WebSockets — فئة URLSessionWebSocketTask. لا حاجة لأي مكتبات خارجية. دعنا نكتب عميلاً بسيطاً.

\n\n

الخطوة 1: إنشاء اتصال WebSocket

\n\n
import 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() دائماً.

\n\n

الخطوة 2: إرسال واستقبال الرسائل

\n\n
extension 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                

المدونات

توصيات الكتب