كيف تبدأ بسرعة مع VUE3.0: ابدأ بالتعلم
هذه هي المقالة الأولى في سلسلة Nodejs عندما قرأت البرامج التعليمية من قبل، بدأ الكثير منها باستخدام الإدخال/الإخراج، والمخزن المؤقت، والمسار، والحدث، وFS، والعملية آليات حلقة حدث العقدة هي بالفعل تبعيات التطوير التي يعتمد عليها تطوير العقدة بشكل أساسي، لكنني قلق جدًا منذ أن تعلمت عن العقدة، وهذا يعني أن العقدة يمكنها القيام بالواجهة الخلفية، لكن النصف الأول من هذه الدورات التدريبية أتحدث عن الإمكانيات التي تتمتع بها، أي كيفية التفاعل معها في النهاية. مقدمة عن وحدة التواصل مع العميل
أشعر بعدم الارتياح الشديد، لذلك عندما أكتب ملخصًا خاصًا بي، يجب أن أكتب الوحدة التي تتواصل بين الخادم
ويشعر العميل أولاً بالراحة. حتى لو كانت نقاط المعرفة الخاصة بوحدة الحدث ووحدة fs متضمنةالعملية، يمكنك وضعها جانبًا في الوقت الحالي وفهم كيفية تنفيذ الوحدة net
للاتصال ككل
إذا كنت ترغب في تعلم وحدة الاتصال، فعليك أن تفهم نموذج اتصال الشبكة. وإذا كنت تريد أن تتذكر نموذج اتصال الشبكة، فيجب عليك التدرب عليه لمساعدة الذاكرة.
هناك الكثير من المحتوى في هذا المجال، وأريد أن أحصلعلى
فهم متعمق له، كما أنه يتطلب دراسة منهجية، وإليك مجرد إشارة مختصرة.
بالنسبة لواجهتنا الأمامية، نحتاج إلى تذكر نتائج النظام لمجموعة بروتوكولات TCP/IP
طبقة نقل
DNS.
: طبقة الإنترنت TCP/UDP
: IP، ICMP (بروتوكول فرعي لطبقة IP)
طبقة ربط البيانات: PPP، SLIP
الطبقة المادية: تحتوي الشبكة على زوج ملتوي وكابل متحد المحور وألياف بصرية وطرق نقل أخرى، وفقًا لمواصفات ISO2110
من يمكن معرفة ICMP
من البروتوكولات المرتبطة ببروتوكول IP أنه لا داعي للقلق كثيرًا بشأن طبقات بروتوكولات الشبكة، ومن الواضح أن ICMP
يحتاج إلى بروتوكول IP كأساس، ولكن تم التخطيط له أيضًا كطبقة شبكة أعتقد أن فهمنا الصحيح لنموذج OSI يجب أن يكون مفيدًا أكثر لاستخدام نموذج OSI لتحليل المشكلات بدلاً من استخدام ما يسمى بطبقات البروتوكولات.
لا تشير مجموعة بروتوكولات TCP/IP فقط إلى TCP وبروتوكولات IP، ولكن نظرًا لأن هذين البروتوكولين خارج الدائرة جدًا، فإن TCP يُستخدم /IP يشير بشكل جماعي إلى مجموعة البروتوكولات المتعلقة بالإنترنت عملية استخدام بروتوكول TCP/IP
يكون تدفق الإرسال للعميل والخادم كما يلي
إذا أصبح الدوران发送者
接受者
، يكون تدفق الإرسال كما يلي:
يمكن ملاحظة أنه أثناء عملية الإرسال، بدءًا من الطرف المرسل، ستتم إضافة معلومات الرأس المطلوبة دون المرور عبر طبقة من البروتوكول وطبقات من التشفير، ثم عندما يتعلق الأمر بالطرف المتلقي، فسيتم ذلك على العكس من ذلك، تمر كل طبقة من خلال إزالة الرؤوس المقابلة. ما عليك سوى الانتظار حتى يتم الحصول على بيانات HTTP النهائية.
الصورة
أعلاه من "Illustrated HTTP"
وما ورد أعلاه هو نموذج بروتوكول الشبكة العام
تقوم العديد من الأماكن بدمج نتائج نظام OSI في TCP/IP؟ هل سيصبح اسم طبقة الشبكة هو طبقة الإنترنت بعد بروتوكول TCP
المصافحة الأولى: يرسل العميل علامة SYN (رقم التسلسل هو J) إلى الخادم، ويدخل حالة SYN_SENT (في انتظار التأكيد من الخادم).
المصافحة الثانية: يتلقى الخادم SYN J من العميل، وسيؤكد الخادم تم استلام حزمة البيانات وإرسال بتة علامة ACK (رقم التسلسل هو J + 1) وبتة علامة SYN (رقم التسلسل هو K)، ثم أدخلت حالة SYN_REVD (قبول الطلب وانتظار حالة تأكيد العميل)
المصافحة الثالثة: يدخل العميل بعد إنشاء الاتصال، يتم إرسال بت علامة ACK (K + 1) إلى الخادم للتأكد من أن العميل قد تلقى الاتصال المؤسس. بعد أن يتلقى الخادم علامة ACK، يدخل الخادم في حالة إنشاء
الاتصال يتم استخدام كلاهما لتحديد من هو الاتصال في الطلب، لا يوجد فرق في بنية SYN و ACK، ولكن الكائنات المرسلة مختلفة
net模块
التنفيذ المحدد لاتصال TCP أعلاه
،
لا يزال يوصى بالانتقال مباشرة إلى الوثائق الرسمية لمعرفة محتوى الوثائق الصينية.
عندما أدرس، أحاول قراءة المستندات الإنجليزية عندما يكون لدي الوقت لقد كنت أصر على ذلك لمدة نصف عام، ولم أتمكن من تحمله في البداية، ولكن الآن يمكنني كبح الانزعاج وقراءته لمدة نصف عام، والتقدم مع مرور الوقت واضح وهذا النوع من الانزعاج هذا أمر جيد، وهذا يعني أن هذه ليست منطقة الراحة الخاصة بك، ففي نهاية المطاف، الشجاعة لعبور منطقة الراحة الخاصة بك هي مصدر
التقدم كائنات لمحاكاة العميل والخادم. قم بإنشاء ملفين، client.js
و service.js
على التوالي، قم بالإنشاء من خلال سطر الأوامر:
المس Client.js && touch Service.js
الوحدة النمطية net
، واتركها. أدخل الخادم حالة LISTENT
، وقم بتكوين رقم المنفذ وعنوان المضيف (تخطي عملية تحليل DNS يدويًا)، وانتظر مكالمة العميل
const net = require("net"); ثابت بوست = 3306؛ مضيف ثابت = "127.0.0.1"; خادم const = net.createServer(); server.listen(post, host);
في هذا الوقت، يتوافق الخادم مع حالة LISTEN
للخادم في اتصال TCP،
ثم يستمع إلى بعض الأحداث الضرورية، وهي الخطافات التي يوفرها الخادم (ينتمي إلى المعرفة المتعلقة بالحدث )
server.on("الاستماع"، ( ) => { console.log("يمكن توصيل الخادم"); }); server.on("اتصال", (مقبس) => { console.log("العميل في زيارة"); }); server.on("إغلاق", () => { console.log("تم إغلاق الخادم"); }); server.on("خطأ"، (خطأ) => { console.log("الخادم لديه خطأ: "، خطأ)؛ // خطأ يحتوي على معلومات خطأ})؛
تتضمن سلسلة الرموز المذكورة أعلاه
listening
: حدث تم تشغيله بعد الاستماع إلىconnection
المنفذ: حدث تم تشغيله عند العميلclose
بسببerror
في إيقاف تشغيل الخادم: بسبب خطأ في الخادمفيما يتعلق close
، نحتاج إلى الانتباه إلى حقيقة أن الأخ في الخلفية عادةً ما يكون مباشرًا
ملاحظة:
يتم تنفيذ
Kill -9 pidعن طريق قتل مؤشر الترابط
في كلب connection
، والمعلمة الرسمية هي اسم المقبس البيانات المرسلة من قبل العميل وذلك لأن البيانات نفسها لها طريقتها الخاصة في معالجة socket
connection
خادم الاتصال ("connection"، (socket) => { console.log("العميل في زيارة"); المقبس.on ("بيانات"، (بيانات) => { console.log(data); //البيانات المرسلة من قبل العميل}); });
سيتم تقديم الدفق في المقالات المستقبلية
نظرًا لأن الخادم يمكنه قبول البيانات المرسلة من قبل العميل، فيمكنه بشكل طبيعي الرد على العميل في socket.on
(بالطبع يمكن كتابته أيضًا في الخارج):
مقبس ("لقد استلمت الخادم الخاص بك، أيها العميل")؛
في هذا الوقت، إذا كان العميل قد أكمل استلام البيانات ثم أغلق الاتصال، فيمكننا أيضًا مراقبته من خلال socket.on('close')
: مقبس.
on ("إغلاق"، () => { console.log("أغلق العميل الطرف الآخر من الدفق"); });
ضع ملخصًا لأحداث socket
في client.js
في هذا الوقت، جميع محتويات service.js
هي كما يلي:
const net = require("net"); ثابت بوست = 3306؛ مضيف ثابت = "127.0.0.1"; خادم const = net.createServer(); server.listen(post, host); server.on("الاستماع"، () => { console.log("يمكن توصيل الخادم"); }); server.on("اتصال", (مقبس) => { console.log("العميل في زيارة"); المقبس.on ("بيانات"، (بيانات) => { console.log(data); // البيانات المرسلة من قبل العميل المقبس.write("لقد تلقيتها من الخادم الخاص بك، العميل"); }); المقبس.on("إغلاق", () => { console.log("أغلق العميل الطرف الآخر من الدفق"); server.Close(); // لم يعد العميل بحاجة إلى البيانات، لذا فلنغلق الخادم}); }); server.on("إغلاق", () => { console.log("تم إغلاق الخادم"); }); server.on("خطأ"، (خطأ) => { console.log("الخادم به خطأ: "، خطأ)؛ // خطأ يحتوي على معلومات خطأ});
3.2
جزء العميل أبسط بكثير.
ثابت بوست = 3306؛ مضيف ثابت = "127.0.0.1"; مقبس const = net.connect(post, host); المقبس.on ("الاتصال"، () => { console.log("متصل بالفعل بالخادم"); }); المقبس.write("الخادم، ها أنا قادم"); المقبس.on ("بيانات"، (بيانات) => { console.log(data.toString()); المقبس. نهاية ()؛ }); المقبس.on("إغلاق", () => { console.log("تم إغلاق الاتصال"); });
ملخص أحداث socket
connect
: يؤدي الاتصال الناجح بالخادم إلى تشغيلdata
: تلقي المعلمات المرسلة منend
الخادم: بعد استلام البيانات، يمكن تشغيلclose
: يؤدي إغلاق المقبس إلى تشغيلإطاري service.js
و client.js
. تم كتابتها وتشغيلها بعد فتح محطتين:
عقدة Service.jsيمكن لـ
Node Client.js
التحقق من النتائج المطبوعة من تلقاء نفسها،
وقد اكتمل إطار اتصال TCP بالكامل بشكل أساسي، ويحتاج الإنتاج الفعلي أيضًا إلى التعامل مع الحزم اللاصقة والتفريغ/التعبئة وحزم نبضات القلب. إلخ.
هذا المقال مستنسخ من: https://juejin.cn/post/7084618854801866765
المؤلف: أنا Little Orange