مكتبة WebSocket الخاصة بـ Kotlin: عميل وخادم Ktor WebSocket

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

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

ابدأ الدورة

مكتبة WebSocket الخاصة بـ Kotlin: Ktor WebSocket



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



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



التثبيت والإعداد



للبدء، أضف التبعيات اللازمة إلى ملف build.gradle.kts (أو build.gradle). إذا كنت تستخدم Gradle، قم بتضمين الوحدات التالية:



// build.gradle.ktsdependencies {    // جزء الخادم    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("io.ktor:ktor-client-core:2.3.0") implementation("io.ktor:ktor-client-cio:2.3.0") implementation("io.ktor:ktor-client-websockets:2.3.0")}


بالنسبة لـ Maven، استخدم القطع الأثرية المماثلة. جميع وحدات Ktor الإصدار 2.x.x تدعم Kotlin Coroutines وتعمل على JVM و Android و iOS ومنصات أخرى.



إنشاء خادم WebSocket باستخدام Ktor



لنكتب خادم صدى بسيط يستقبل الرسائل من العميل ويعيد إرسالها مرة أخرى. سوف يستمع الخادم على المنفذ 8080.



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

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


في هذا المثال:

  • install(WebSockets) - يقوم بتوصيل إضافة WebSocket بالخادم.
  • webSocket("/chat") - يحدد نقطة النهاية للاتصال.
  • send() - يرسل رسالة إلى العميل.
  • incoming - القناة التي تصل من خلالها الإطارات من العميل.
  • يمكن أن تكون الإطارات نصية (Frame.Text)، ثنائية (Frame.Binary) أو تحكمية.


إنشاء عميل WebSocket باستخدام Ktor



الآن لنكتب عميلاً يتصل بخادمنا، ويرسل تحية، ويقرأ الردود.



import io.ktor.client.*import io.ktor.client.engine.cio.*import io.ktor.client.plugins.websocket.*import io.ktor.websocket.*import kotlinx.coroutines.*

suspend fun main() { val client = HttpClient(CIO) { install(WebSockets) }

client.webSocket("ws://localhost:8080/chat") { // قراءة التحية val welcome = incoming.receive() as Frame.Text println("الخادم: ${welcome.readText()}")

// إرسال رسالة send(Frame.Text("مرحباً أيها الخادم!"))

// انتظار رد الصدى val response = incoming.receive() as Frame.Text println("الخادم: ${response.readText()}")

// إغلاق الاتصال close() }

client.close()}


يستخدم العميل

توصيات