WebSocket على Kotlin: تطبيقات الوقت الفعلي من الألف إلى الياء

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

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

ابدأ الدورة

WebSocket على Kotlin: إنشاء تطبيقات الوقت الفعلي من الصفر



تتطلب تطبيقات الويب الحديثة بشكل متزايد نقلًا فوريًا للبيانات بين العميل والخادم. بروتوكول HTTP التقليدي، الذي يعمل وفق مبدأ "طلب-استجابة"، غير مناسب للمهام التي تتطلب اتصالًا ثنائيًا مستمرًا - مثل الدردشات، والألعاب عبر الإنترنت، وأسعار الأسهم، أو الإشعارات في الوقت الفعلي. وهنا يأتي دور بروتوكول WebSocket. في هذه المقالة، سنشرح كيفية إنشاء تطبيقات الوقت الفعلي على Kotlin باستخدام WebSocket، من النظرية الأساسية إلى الأمثلة العملية.



بفضل إيجاز Kotlin وأمانه وتوافقه الكامل مع نظام Java البيئي، فهو خيار ممتاز لتطوير الجزء الخادم. كإطار عمل رئيسي، سنستخدم Ktor - إطار عمل غير متزامن حديث لـ Kotlin، ويدعم WebSocket بشكل مدمج.



ما هو WebSocket ولماذا هو مطلوب؟



WebSocket هو بروتوكول يوفر اتصالًا ثنائي الاتجاه الكامل (ثنائي الاتجاه) بين العميل والخادم عبر اتصال TCP واحد دائم. على عكس HTTP، حيث يكون العميل دائمًا هو البادئ بالطلب، يسمح WebSocket للخادم بإرسال البيانات إلى العميل بشكل مستقل في أي وقت.



المزايا الرئيسية لـ WebSocket:

  • زمن انتقال منخفض: لا توجد تكاليف إضافية لإنشاء اتصال جديد لكل رسالة.
  • كفاءة: الحد الأدنى من حركة المرور الإضافية (2 بايت فقط لكل رسالة بعد إنشاء الاتصال).
  • اتصال دائم: يمكن للخادم إرسال البيانات في الوقت الفعلي دون استقصاء من جانب العميل.


WebSocket مثالي لـ:

  • الدردشات عبر الإنترنت وتطبيقات المراسلة
  • تحرير المستندات بشكل تعاوني
  • أسعار الأسهم والبيانات المالية
  • الألعاب متعددة اللاعبين
  • الإشعارات الفورية والمراقبة


إعداد مشروع Ktor لـ WebSocket



قبل كتابة الكود، يجب إعداد المشروع. أسهل طريقة للقيام بذلك هي عبر IntelliJ IDEA مع إضافة Ktor، أو يدويًا عبر Gradle.



الخطوة 1: إنشاء المشروع

أنشئ مشروع Gradle جديدًا مع Kotlin (JVM). في ملف build.gradle.kts، أضف التبعيات التالية:



plugins {    kotlin("jvm") version "1.9.22"    id("io.ktor.plugin") version "2.3.7"}

application { mainClass.set("ApplicationKt")}

dependencies { implementation("io.ktor:ktor-server-core:2.3.7") implementation("io.ktor:ktor-server-netty:2.3.7") implementation("io.ktor:ktor-server-websockets:2.3.7") implementation("ch.qos.logback:logback-classic:1.4.14")}


الخطوة 2: هيكل الخادم الأساسي

لننشئ ملف Application.kt ونكتب خادم WebSocket بسيطًا:



import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.websocket.*import io.ktor.websocket.*import kotlinx.coroutines.delay

fun main() { embeddedServer(Netty, port = 8080) { install(WebSockets) webSocket("/chat") { send("مرحبًا بك في الدردشة!") for (frame in incoming) { if (frame is Frame.Text) { val text = frame.readText() send("لقد كتبت: $text") println("تم الاستلام: $text") } } } }.start(wait = true)}


يقوم هذا الكود بتشغيل خادم على المنفذ 8080، والذي يقبل اتصالات WebSocket على المسار /chat. عند الاتصال، يتلقى العميل رسالة ترحيب، ثم يرد الخادم على كل رسالة نصية بصدى.



إنشاء دردشة متقدمة مع غرف



الآن، دعنا ننتقل إلى مثال أكثر تعقيدًا - متعدد

المدونات

توصيات الكتب