Analisis mendalam tentang modul bersih dalam Nodejs

青灯夜游
Lepaskan: 2022-04-29 21:11:55
ke hadapan
3606 orang telah melayarinya

Artikel ini akan memperkenalkan anda kepada modul bersih dalam Nod Saya harap ia akan membantu anda!

Analisis mendalam tentang modul bersih dalam Nodejs

Ini adalah artikel pertama dalam siri Nodejs Semasa saya menonton tutorial sebelum ini, kebanyakannya bermula dari IO, penimbal, laluan, acara, Mari kita mulakan dengan mekanisme gelung peristiwa fs, proses dan nod Ini sememangnya kebergantungan pembangunan yang bergantung kepada pembangunan nod Tetapi saya lebih bimbang Daripada mempelajari tentang nod, ini bermakna nod boleh melakukan bahagian belakang separuh daripada kursus ini adalah Untuk bercakap tentang keupayaan yang dimilikinya, ia adalah pengenalan modul tentang cara berkomunikasi dengan pelanggan pada penghujungnya.

Saya berasa sangat tidak selesa, jadi apabila saya menulis ringkasan saya sendiri, Saya mesti menulis modul yang berkomunikasi antara pelayan dan klien terlebih dahulu. Walaupun titik pengetahuan modul acara dan modul fs terlibat dalam proses, anda boleh mengetepikan sementara dan hanya memahami bagaimana net. modul melaksanakan komunikasi secara keseluruhan

1. Model protokol tujuh lapisan OSI

Jika anda ingin memahami modul komunikasi, anda perlu memahami model komunikasi rangkaian. . Jika anda ingin mengingati model komunikasi rangkaian, anda perlu mempraktikkannya untuk membantu ingatan Ini adalah fokus temu bual ia memerlukan kajian yang sistematik. Berikut adalah sebutan ringkas

Hantar gambar lama ini:

Analisis mendalam tentang modul bersih dalam Nodejs

Untuk bahagian hadapan kita, kita perlu ingat sistem. keputusan suite protokol TCP/IP.

  • Lapisan aplikasi: http (port 80), FTP (21), SMTP ( Hantar mel), POP (terima mel), DNS

  • Lapisan pengangkutan: TCP/ UDP

  • Lapisan Internet: IP, ICMP (ialah protokol aksesori Lapisan IP)

  • Lapisan pautan data: PPP, SLIP

  • Lapisan fizikal: Rangkaian mempunyai pasangan terpiuh, kabel sepaksi, Gentian optik dan kaedah penghantaran lain mengikut spesifikasi ISO2110

Dari ICMP protokol yang bergantung pada protokol IP ini, kita boleh tahu bahawa tidak perlu terlalu berat tentang pelapisan protokol rangkaian ICMP Jelas sekali protokol IP adalah asas, tetapi ia juga dirancang sebagai lapisan rangkaian, saya fikir, pemahaman kami yang betul tentang model OSI adalah lebih bermakna untuk menggunakan model OSI untuk menganalisis masalah daripada menggunakan protokol yang dipanggil

Kluster protokol TCP/IP bukan sahaja merujuk kepada protokol TCP dan IP, tetapi kerana kedua-dua protokol ini terlalu terkeluar dari kalangan, TCP/IP digunakan untuk merujuk secara kolektif kepada koleksi berkaitan Internet protokol. Juga Terdapat cara lain untuk mengatakan ia adalah nama kolektif untuk keluarga protokol yang digunakan dalam penggunaan protokol TCP/IP.

Aliran penghantaran antara klien dan pelayan adalah seperti berikut

Analisis mendalam tentang modul bersih dalam Nodejs

Jika watak menjadi 发送者 dan 接受者, aliran penghantaran adalah seperti berikut:

Analisis mendalam tentang modul bersih dalam Nodejs

Ia dapat dilihat bahawa semasa proses penghantaran, dari penghantaran Bermula dari hujung penerimaan, maklumat pengepala yang diperlukan akan ditambah tanpa melalui lapisan protokol semakan dan pengekodan lapisan demi lapisan ke hujung penerima, ia akan melakukan sebaliknya, menanggalkan pengepala yang sepadan selepas setiap lapisan Hanya tunggu sehingga akhir data HTTP yang diperolehi.

Gambar di atas adalah daripada "Illustrated HTTP" <.>

Di atas ialah model protokol rangkaian umum.

Ragu: Mengapakah ia ada dalam buku selepas menggabungkan hasil sistem OSI ke dalam protokol lima lapisan TCP/IP di banyak tempat , adakah nama lapisan rangkaian akan menjadi lapisan Internet?

2 Sambungan TCP

Analisis mendalam tentang modul bersih dalam Nodejs

Jabatan tangan pertama: Pelanggan menghantar. bit bendera SYN (nombor urutan ialah J) ke pelayan, dan memasuki keadaan SYN_SENT (menunggu pengesahan daripada pelayan)

Jabatan Tangan Kedua: Pelayan menerima SYN J daripada klien bahawa paket data telah diterima dan menghantar bit bendera ACK (nombor urutan ialah J 1) dan bit bendera SYN (nombor urutan ialah K), dan kemudian masukkan keadaan SYN_REVD (permintaan Terima dan tunggu status pengesahan pelanggan)

Jabatan tangan ketiga: Selepas pelanggan memasuki keadaan penubuhan sambungan, ia menghantar bit bendera ACK (K 1) kepada pelayan untuk mengesahkan bahawa klien telah menerima penubuhan sambungan, dan pelayan telah menerima Selepas mencapai bendera ACK, pelayan memasuki keadaan sambungan yang telah ditetapkan.

J dan K digunakan untuk menentukan siapa yang meminta Tiada perbezaan dalam struktur SYN dan ACK, tetapi objek yang dihantar adalah berbeza >

3. Modul bersih

ialah pelaksanaan khusus sambungan TCP di atas.

Pertama sekali, untuk mempelajari API, anda masih disyorkan untuk pergi terus ke dokumentasi rasmi Kandungan dokumentasi Cina bukan versi terkini

bila belajar, Setiap kali saya ada masa untuk membaca dokumen Bahasa Inggeris, saya cuba membaca dokumen Bahasa Inggeris Saya telah menegaskan perkara ini selama setengah tahun saya tidak tahan pada mulanya, tetapi sekarang saya boleh menahan ketidakselesaan dan membacanya Kemajuan telah jelas dalam setengah tahun Dan Ketidakselesaan seperti ini adalah perkara yang baik, ini bermakna bahawa ini bukan zon selesa anda sumber kemajuan

Seterusnya, mari kita ke intinya Memandangkan anda ingin mempelajari komunikasi, maka Kami memerlukan dua objek untuk mensimulasikan klien dan pelayan masing-masing . Cipta melalui baris arahan:

client.jsservice.js

3.1 service.js part
touch client.js && touch service.js
Salin selepas log masuk

Perkenalkan modul , biarkan pelayan memasuki keadaan

, konfigurasikan nombor port dan alamat HOST (langkau proses resolusi DNS secara manual), dan tunggu panggilan pelanggan

netLISTENTPada masa ini, pelayan sepadan dengan status pelayan

dalam sambungan TCP
const net = require("net");
const post = 3306;
const host = "127.0.0.1";

const server = net.createServer();
server.listen(post, host);
Salin selepas log masuk

kemudian memantau beberapa acara yang diperlukan, iaitu cangkuk yang disediakan oleh pelayan (Milik pengetahuan berkaitan acara) LISTEN

Rentetan kod di atas melibatkan,

server.on("listening", () => {
  console.log("服务器已经可以连接啦");
});

server.on("connection", (socket) => {
  console.log("有客户端来访咯");
});

server.on("close", () => {
  console.log("服务器关闭了");
});

server.on("error", (error) => {
  console.log("服务器出错啦: ", error); // error 有错误的信息
});
Salin selepas log masuk
.

: peristiwa dicetuskan selepas mendengar port
  • listening: peristiwa dicetuskan apabila pelanggan melawat
  • connection: Dicetuskan oleh penutupan pelayan
  • close: Dicetuskan oleh ralat pelayan
  • errorUntuk
  • kita perlu ambil perhatian bahawa abang latar biasanya secara langsung

closeDiproses dengan membunuh benang

ps
kill -9 pid
Salin selepas log masuk
Dalam

Gouzi, parameter formal ialah nama soket Terjemahan bahasa Cinanya ialah perkataan bersarang, yang dirangkumkan oleh nod ke dalam aliran (Strim). data itu sendiri mempunyai kaedah tersendiri. Saya memproses

dalam

connectionconnectionsocket

strim akan diperkenalkan dalam artikel akan datang
server.on("connection", (socket) => {
  console.log("有客户端来访咯");

  socket.on("data", (data) => {
    console.log(data); // 客户端发送过来的数据
  });
});
Salin selepas log masuk

Memandangkan pelayan boleh menerima data yang dihantar oleh pelanggan, ia secara semula jadi boleh membalas kepada pelanggan Tuliskannya dalam

(tentunya ia juga boleh Ditulis di luar):

socket.onPada masa ini, jika pelanggan telah selesai menerima. data dan kemudian menutup sambungan. Kami juga boleh mendengarnya melalui cangkuk

:
socket.write("我已经收到你的服务器了哦,客户端");
Salin selepas log masuk

socket.on(&#39;close‘)Masukkan ringkasan acara

ke dalam
socket.on("close", () => {
  console.log("客户端把另外一头的流给关了");
});
Salin selepas log masuk
. Pada masa ini, semua kandungan

adalah seperti berikut: socketclient.jsservice.js

3.2 bahagian client.js
const net = require("net");
const post = 3306;
const host = "127.0.0.1";

const server = net.createServer();
server.listen(post, host);

server.on("listening", () => {
  console.log("服务器已经可以连接啦");
});

server.on("connection", (socket) => {
  console.log("有客户端来访咯");

  socket.on("data", (data) => {
    console.log(data); // 客户端发送过来的数据

    socket.write("我已经收到你的服务器了哦,客户端");
  });

  socket.on("close", () => {
    console.log("客户端把另外一头的流给关了");
    server.close(); // 客户端已经不要数据了,那么我们就把服务器给关闭了吧
  });
});

server.on("close", () => {
  console.log("服务器关闭了");
});

server.on("error", (error) => {
  console.log("服务器出错啦: ", error); // error 有错误的信息
});
Salin selepas log masuk

Pihak pelanggan adalah lebih mudah.

Ringkasan peristiwa

const net = require("net");
const post = 3306;
const host = "127.0.0.1";

const socket = net.connect(post, host);

socket.on("connect", () => {
  console.log("已经连接到服务器了哦");
});

socket.write("服务器, 我来了");
socket.on("data", (data) => {
  console.log(data.toString());
  socket.end();
});

socket.on("close", () => {
  console.log("连接已关闭了");
});
Salin selepas log masuk

socket

: Dicetuskan oleh sambungan yang berjaya dengan pelayan
  • connect: Menerima parameter yang dihantar oleh pelayan
  • data: Boleh dicetuskan selepas penerimaan data selesai
  • end: Dicetuskan oleh penutupan soket Jalankannya pada terminal:
  • closeLihat hasil cetakan sendiri.
Keseluruhan rangka kerja sambungan TCP secara amnya sudah tentu, pengeluaran sebenar jauh lebih banyak daripada ini. 🎜>

service.jsArtikel ini diterbitkan semula daripada: https://juejin.cn/post/7084618854801866765client.js

Pengarang: I am Little Orange
node service.js
node client.js
Salin selepas log masuk

Untuk lebih banyak nod- pengetahuan berkaitan, sila lawati:

tutorial nodejs

!

Atas ialah kandungan terperinci Analisis mendalam tentang modul bersih dalam Nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!