Java NIO (إدخال / إخراج بدون حظر) مع مثال عميل الخادم - java.nio.ByteBuffer والقنوات.Selector - Java NIO مقابل. IO

نشرت: 2021-08-06
Java NIO (بدون حظر I: O) مع مثال عميل الخادم - CrunchifyNIOServer.java

Java NIO هو موضوعي المفضل. أعمل مع NIO منذ العامين الماضيين وأرغب في مشاركة Server-Client code البسيط لقرائي الذين يتمتعون بحرية استخدام هذا الرمز في بيئة الإنتاج الخاصة بهم.

بدءًا من JDK 1.4 ، تم إنشاء NIO للسماح لجميع مبرمجي Java بتنفيذ إدخال / إخراج عالي السرعة دون الحاجة إلى التعامل مع التعليمات البرمجية الأصلية المخصصة. يستخدم NIO مكتبة java.nio.buffer مقارنة بمدخلات الإدخال / الإخراج البسيطة التي تستنزف وتعبئ المخزن المؤقت داخليًا لأي نظام تشغيل.

في هذا البرنامج التعليمي سوف ننتقل إلى مكتبات java.nio.channels و java.nio.channels.Selector .

  • تمثل channels الاتصالات بالكيانات القادرة على تنفيذ عمليات الإدخال / الإخراج ، مثل الملفات والمآخذ ؛ يحدد المحددات لعمليات الإدخال / الإخراج متعددة الإرسال وغير المحظورة.
  • يمكن إنشاء selector عن طريق استدعاء open method لهذه الفئة ، والتي ستستخدم موفر المحدِّد الافتراضي للنظام لإنشاء محدِّد جديد.
شرح حزمة java.nio مع تفاصيل API

إذا كانت لديك below questions ، فأنت في المكان الصحيح:

  • كيف تبدأ مع Java NIO
  • ما هي برامج Java NIO و Java NIO التعليمية
  • Java NIO غير المتزامن
  • ما هو الاستخدام الدقيق لحزمة java nio
  • برنامج Java NIO التعليمي
  • كيفية تنفيذ إدخال / إخراج عالي الأداء باستخدام Java NIO

هيا بنا نبدأ:

الخطوة 1

  • قم CrunchifyNIOServer.java الذي يفتح الاتصال على port 1111
  • استخدم isAcceptable() للتحقق مما إذا كانت القناة جاهزة لقبول اتصال مقبس جديد
    • إذا كانت الإجابة بنعم - قم بتوصيله
  • استخدم isReadable() للتحقق مما إذا كانت القناة جاهزة للقراءة
    • إذا كانت الإجابة بنعم - اقرأ من المخزن المؤقت واطبع على وحدة تحكم Eclipse
  • بمجرد الحصول على اسم الشركة الأخير "crunchify"
    • اغلق الاتصال

الخطوة 2

  • قم CrunchifyNIOClient.java الذي يحاول الاتصال بالخادم على port 1111
  • قم بإنشاء ArrayList مع 5 أسماء شركات
  • كرر من خلال ArrayList وأرسل اسم الشركة إلى الخادم
  • إغلاق الاتصال بعد انتهاء المهمة

ألق نظرة على كود Java هذا:

كود الخادم - CrunchifyNIOServer.java


كود العميل - CrunchifyNIOClient.java

Java NIO (بدون حظر I: O) مع مثال عميل الخادم - CrunchifyNIOClient.java

النتيجة على جانب الخادم:

النتيجة من جانب العميل:


قليل من الأسئلة الشائعة:

  1. من العميل ، كيف أحافظ على اتصال دائم؟
    • يمكنك استخدام socket.setKeepAlive(true); للحصول على اتصالات حية من جانب العميل.
  2. كيف أقرأ ردًا على الرسالة التي أرسلها إلى الخادم. يستمر الخادم في إنشاء الرسائل كل 10 ثوانٍ. أنا فقط بحاجة لقراءة الرد على طلبي. بناءً على ما أفهمه ، فإن بيانات "تدفقات" TCP بدلاً من نهاية السجل ، إلخ.
    • بالنسبة لاتصال خادم العميل ، يجب تحديد البروتوكول جيدًا. سيتم حظر مكالمة readLine() حتى يتم إرجاع جميع البيانات ، لذلك لا تستخدمها. Try reading bytes from the stream until -1 is returned.

دعنا نذهب للعمل.