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

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

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

ابدأ الدورة

مقدمة إلى WebSocket بلغة Kotlin: من النظرية إلى التطبيق العملي في الوقت الفعلي



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



Kotlin، كونها لغة حديثة لـ JVM وJavaScript وNative، توفر أدوات ممتازة للعمل مع WebSocket. في هذه المقالة، سنشرح كيفية إنشاء تطبيقات الوقت الفعلي بلغة Kotlin باستخدام مكتبة Ktor — الإطار الشهير لبناء الخوادم والعملاء غير المتزامنين. ستتعلم كيفية إعداد اتصال WebSocket، وإرسال واستقبال الرسائل، ومعالجة الأخطاء، وبناء حلول قابلة للتوسع.



1. أساسيات WebSocket: لماذا Kotlin وKtor؟



WebSocket هو بروتوكول يقوم، بعد إنشاء الاتصال عبر مصافحة HTTP، بتحويل القناة إلى وضع ثنائي الاتجاه مستمر. على عكس HTTP، يمكن للخادم بدء إرسال البيانات دون طلب من العميل. هذا مثالي لسيناريوهات الوقت الفعلي.



Kotlin مع Ktor تقدم:

  • عدم التزامن — تسمح coroutines في Kotlin بمعالجة آلاف الاتصالات المتزامنة دون حظر الخيوط.
  • التعدد المنصات — يمكن تشغيل نفس الكود على JVM وJavaScript وNative.
  • الإيجاز — حد أدنى من الكود التكراري، أقصى قدر من التعبير.
  • الأمان — دعم مدمج لـ SSL/TLS والمصادقة وCORS.


دعنا ننتقل إلى التطبيق العملي وننشئ خادم وعميل WebSocket بسيطين بلغة Kotlin.



2. إنشاء خادم WebSocket بلغة Kotlin مع Ktor



2.1. إعداد المشروع



للبدء، قم بإنشاء مشروع Gradle أو Maven جديد. أضف تبعيات Ktor في ملف build.gradle.kts:



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


2.2. تنفيذ الخادم



لننشئ خادم WebSocket يقبل الاتصالات، ويقرأ الرسائل، ويرد عليها. المثال أدناه يستخدم مكتبة Ktor مع coroutines:



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(Frame.Text("مرحباً بك في الدردشة!")) for (frame in incoming) { if (frame is Frame.Text) { val text = frame.readText() println("تم الاستلام: $text") send(Frame.Text("الصدى: $text")) } } } }.start(wait = true)}


هنا نقوم بـ:

  • تثبيت البرنامج المساعد WebSockets.
  • تحديد نقطة النهاية /chat.
  • معالجة الإطارات الواردة في coroutine وإرسال رد الصدى.


2.3. معالجة الأخطاء وإغلاق الاتصال



في التطبيقات الحقيقية، من المهم معالجة انقطاعات الاتصال بشكل صحيح. دعنا نضيف معالجة الاستثناءات وإغلاق الجلسة:



webSocket("/chat") {    try {        send(Frame.Text("تم إنشاء الاتصال"))        for (frame in incoming) {            when (frame) {                is Frame.Text -> {                    val text = frame.readText()                    if (text.equals("exit", ignoreCase = true)) {                

المدونات

توصيات الكتب