يوفر العقدة وحدات برمجة الشبكات الغنية
| وحدة العقدة | بروتوكول |
| شبكة | TCP |
| Dgram | UDP |
| http | http |
| https | https |
تنقسم أحداث خدمة TCP إلى الفئتين التاليتين
(1) حدث الخادم
بالنسبة للخوادم التي تم إنشاؤها من خلال net.createserver () ، فهي مثيل EventEmitter ، وهناك العديد من الأحداث المخصصة:
الاستماع: تم تشغيله بعد استدعاء الاستماع () لربط منفذ أو مقبس المجال ، المختصر كخادم. Listen (المنفذ ، المستمع) ، تم تمريره من خلال المعلمة الثانية.
الاتصال: يتم تشغيله عند توصيل كل مقبس عميل بالخادم. الطريقة البسيطة هي تمرير المعلمة الأخيرة من خلال net.createserver ().
أغلق: يتم تشغيله عند إغلاق الخادم. بعد استدعاء server.close () ، سيتوقف الخادم عن قبول اتصالات المقبس الجديدة ، ولكن الحفاظ على الاتصالات الموجودة حاليًا وانتظر فصل جميع الاتصالات ، وسيتم تشغيل هذا الحدث.
خطأ: سيتم تشغيل هذا الحدث عندما يحدث استثناء على الخادم.
(2) حدث اتصال
يمكن للخادم الحفاظ على اتصالات مع العديد من العملاء في نفس الوقت ، كائن دفق نموذجي قابل للكتابة وقابل للقراءة لكل اتصال. يمكن استخدام كائنات الدفق للاتصال بين الخادم والعميل. يمكنهم قراءة البيانات المرسلة من نهاية واحدة من نهاية واحدة من خلال أحداث البيانات ، أو إرسال بيانات من طرف إلى الطرف الآخر من خلال طريقة الكتابة ().
البيانات: عندما يقوم أحد الجانبين بالاتصالات () لإرسال البيانات ، فإن الجانب الآخر سيؤدي إلى تشغيل حدث البيانات. البيانات التي يمر بها الحدث هي البيانات المرسلة بواسطة Write ().
النهاية: سيتم تشغيل هذا الحدث عندما يرسل أي من نهاية الاتصال بيانات الزعانف.
الاتصال: يتم استخدام هذا الحدث للعميل وسيتم إطلاقه عندما يتصل المقبس بنجاح بالخادم.
استنزاف: عندما يقوم أي من المكالمات الطرفية بكتابة () لإرسال البيانات ، فإن النهاية الحالية تؤدي إلى الحدث.
خطأ: عند إرسال الاستثناء
إغلاق: تم إطلاقه عند إغلاق المقبس بالكامل
مهلة: عندما لم يعد الاتصال نشطًا بعد فترة زمنية معينة ، مما يؤدي إلى إدراك الحدث لإخطار المستخدم بأن الاتصال في وضع الخمول.
لدى TCP بعض استراتيجيات التحسين لحزم البيانات الصغيرة في الشبكة: خوارزمية Nagle ، والتي يتم تشغيلها فقط عندما تصل البيانات إلى مبلغ معين.
خدمات UDP
يسمى UDP بروتوكول حزمة المستخدم ، وهي ليست خدمة موجهة نحو الاتصال. UDP in Node هو مجرد مثيل EventEmitter ، وليس مثيل دفق ، مع الأحداث المخصصة التالية:
(1) الرسالة: عندما يراقب مقبس UDP منفذ بطاقة الشبكة ويتلقى الرسالة ، فإن البيانات التي يحملها المشغل هي كائن المخزن المؤقت للرسالة ومعلومات العنوان عن بُعد.
(2) الاستماع: يتم تشغيل هذا الحدث عندما يبدأ مقبس UDP في الاستماع.
(3) إغلاق: يتم تشغيل هذا الحدث عندما يتم استدعاء طريقة Close () ، ولم يعد حدث حدث الرسالة. إذا كان من الضروري تشغيل حدث الرسالة مرة أخرى ، فيجب أن يعرّف.
(4) خطأ: يتم تشغيله عند حدوث استثناء. إذا لم يتم الاستماع إليه ، فسيتم إلقاؤه مباشرة ، مما يتسبب في خروج العملية.
خدمة HTTP
ترث وحدة HTTP في العقدة من خادم TCP (وحدة NET) ، والتي يمكن أن تحافظ على اتصال مع عملاء متعددين. نظرًا لأنه لا يقوم بإنشاء مؤشرات ترابط لكل اتصال ويحافظ على انخفاض بصمة ذاكرة منخفضة للغاية ، فإنه يمكن أن يحقق تزامنًا كبيرًا. الفرق بين خدمة HTTP وخدمة TCP هو أنه بعد تمكين Keepalive ، يمكن استخدام جلسة TCP لطلبات واستجابات متعددة. يتم استخدام خدمة TCP كوحدة للاتصال ، ويتم استخدام خدمة HTTP كوحدة للطلب. تتمثل وحدة HTTP في تغليف عملية الاتصال للطلب.
تقوم وحدة HTTP بإجراء قراءة وكتابة المقبس المستخدم للاتصال بكائنات ServerRequest و ServerResponse ، المقابلة لعمليات الطلب والاستجابة على التوالي.
(1) طلب HTTP
بالنسبة لعملية قراءة اتصال TCP ، تغلفها وحدة HTTP ككائن ServerRequest. على سبيل المثال ، جزء الرأس req.method ، req.url ، req.headers ، يتم تجريد جزء بيانات نظام الرسائل في كائن دفق للقراءة فقط. إذا احتاج منطق العمل إلى قراءة البيانات في نظام الرسائل ، فيجب إكمال دفق البيانات قبل إجراء العملية.
(2) استجابة HTTP
تغلف استجابة HTTP عملية الكتابة للاتصال الأساسي ، والتي يمكن اعتبارها ككائن دفق قابل للكتابة.
أساليب معلومات الرأس في حزمة الاستجابة: Res.Setheader () و Res.WriteHeader () أساليب. يمكنك setheader عدة مرات للإعداد ، ولكن يجب عليك الاتصال بـ WriteHeader للكتابة إلى الاتصال قبل أن يسري.
الطرق الجزئية للرسالة: Res.Write () و res.end () طرق
(3) حدث خادم HTTP
الاتصال: عندما يقوم العميل بإنشاء اتصال TCP مع الخادم ، يتم تشغيل حدث اتصال
الطلب: بعد إنشاء اتصال TCP ، تقوم وحدة HTTP بتجريد طلب HTTP واستجابة HTTP من دفق البيانات. عند إرسال بيانات الطلب إلى الخادم ، يتم تشغيل الحدث بعد تحليل رأس طلب HTTP ؛ بعد res.end () ، يمكن استخدام اتصال TCP للطلب التالي.
أغلق: استدعاء طريقة server.close للتوقف عن تلقي اتصالات جديدة ، مما يؤدي إلى تشغيل هذا الحدث عند فصل جميع الاتصالات الموجودة.
CheckContInue: عندما يرسل بعض العملاء بيانات أكبر ، يقومون أولاً بإرسال طلب مع توقع: 100 استئناف في الرأس إلى الخادم ، وتؤدي الخدمة إلى تشغيل الحدث ؛
الاتصال: يتم تشغيله عندما يبدأ العميل طلب الاتصال
الترقية: عندما يتطلب العميل ترقية لبروتوكول الاتصال ، فإنه يحتاج إلى التفاوض مع الخادم. سيحضر العميل حقل updagrade في رأس الطلب.
Clienterror: يرسل العميل المتصل خطأً ، ويتم إرسال الخطأ إلى الخادم ويتم تشغيل الحدث.
(4) عميل HTTP
توفر وحدة HTTP http.request (الخيارات ، الاتصال) لبناء عملاء HTTP.
يشبه عميل HTTP الخادم. في كائن ClientRequest ، يسمى حدثه الاستجابة. عندما يقوم ClientRequest بتوزيع رسالة الاستجابة ، سيتم تشغيل حدث الاستجابة بمجرد تحليل رأس الاستجابة. في الوقت نفسه ، يتم تمرير استجابة كائن الاستجابة للتشغيل. يتم توفير رسالة الاستجابة اللاحقة في دفق للقراءة فقط.
(5) أحداث عميل HTTP
الإجابة: يقوم العميل المقابل لحدث الطلب على الخادم بإعداد الحدث عند الرد على الطلب بعد إصدار الطلب.
المقبس: يتم إطلاقه عند تعيين الاتصال الذي تم إنشاؤه في تجمع الاتصال الأساسي لكائن الطلب الحالي ؛
الاتصال: عندما يرسل العميل طلب الاتصال إلى الخادم ، إذا كان الخادم يستجيب إلى 200 رمز حالة ، فإن العميل سيؤدي إلى تشغيل الحدث.
الترقية: عندما يستمتع العميل بطلب الترقية عندما يستمتع العميل بالخادم ، يرسل الخادم طلب ترقية ، إذا كان الخادم يستجيب لحالة بروتوكولات التبديل 101 ، فسيقوم العميل بإعداد الحدث.
متابعة: بعد أن يبدأ العميل في توقع: معلومات رأس 100-استوائية إلى الخادم ، فإنه يحاول إرسال بيانات أكبر. إذا استجاب الخادم لحالة 100 ، فإن الخادم سيؤدي إلى تشغيل الحدث
خدمات WebSocket
ظهر WebSocket لأول مرة كميزة مهمة لـ HTML5 ، ولديه المزايا التالية على HTTP:
(1) يقوم العميل والخادم فقط بإنشاء اتصال TCP مرة واحدة ، ويمكن استخدام اتصالات أقل
(2) يمكن لـ WebSocket Server دفع البيانات إلى العميل ، وهو أكثر مرونة وفعالية من وضع استجابة طلب HTTP
(3) رأس بروتوكول أخف لتقليل نقل البيانات
لا توجد WebSocket مدمجة في Node ، لكن وحدة WS في المجتمع تغلف التنفيذ الأساسي لـ WebSocket مثل Socket.io الشهير