Rumah  >  Artikel  >  hujung hadapan web  >  Artikel untuk bercakap tentang modul bersih dalam Node

Artikel untuk bercakap tentang modul bersih dalam Node

青灯夜游
青灯夜游ke hadapan
2023-02-09 20:00:232322semak imbas

Modul bersih disediakan dalam Node.js, yang menyediakan enkapsulasi dan sokongan untuk TCP dan Socket. Artikel ini akan memperkenalkan anda kepada modul bersih dalam Node.

Artikel untuk bercakap tentang modul bersih dalam Node

Apabila saya menonton tutorial sebelum ini, banyak yang bermula dari IO, penimbal, laluan, acara, fs, proses, mekanisme gelung peristiwa nod ini memang yang utama kebergantungan pembangunan yang bergantung kepada pembangunan nod Tetapi saya agak bimbang Dari masa saya belajar tentang nod, ini bermakna nod boleh melakukan bahagian belakang, tetapi separuh pertama kursus ini adalah mengenai keupayaan yang dimilikinya, iaitu, bagaimana. untuk berkomunikasi dengan pelanggan pada akhirnya. Pengenalan kepada modul komunikasi pelanggan.

Saya berasa sangat tidak selesa, jadi apabila saya menulis ringkasan saya sendiri, saya mesti menulis modul yang berkomunikasi antara pelayan dan pelanggan terlebih dahulu untuk berasa selesa. Walaupun modul acara dan modul fs terlibat dalam proses Anda boleh mengetepikan mata pengetahuan buat sementara waktu dan hanya memahami bagaimana modul net melaksanakan komunikasi secara keseluruhan >1. Model protokol tujuh lapisan OSI

Nak belajar Untuk memahami modul komunikasi, anda perlu memahami model komunikasi rangkaian Jika anda ingin mengingati model komunikasi rangkaian, anda perlu berlatih ia untuk membantu ingatan Ini adalah fokus temu bual Terdapat banyak kandungan dalam bidang ini Jika anda ingin mempunyai pemahaman yang mendalam, ia adalah perlu Pembelajaran sistematik . [Tutorial berkaitan yang disyorkan: tutorial video nodejs

,

Pengajaran pengaturcaraan]Hantar gambar lama ini:

Untuk bahagian hadapan kami, kami perlu mengingati hasil sistem suite protokol TCP/IP.Artikel untuk bercakap tentang modul bersih dalam Node

Lapisan aplikasi: http (port 80), FTP (21), SMTP ( Hantar mel), POP (terima mel), DNS
  • Lapisan pengangkutan: TCP/ UDP
  • Lapisan Internet: IP, ICMP (ialah Lapisan IP protokol aksesori)
  • Lapisan pautan data: PPP, SLIP
  • Lapisan fizikal: Rangkaian mempunyai pasangan terpiuh, kabel sepaksi, Gentian optik dan lain-lain kaedah penghantaran mengikut spesifikasi ISO2110
  • Dari
  • protokol yang bergantung kepada protokol IP ini, kita boleh tahu bahawa tidak perlu terlalu berat tentang pelapisan protokol rangkaian .
Jelas sekali diperlukan Protokol IP adalah asas, tetapi ia juga dirancang sebagai lapisan rangkaian, saya fikir, adalah lebih bermakna untuk menggunakan model OSI untuk menganalisis masalah daripada menggunakan apa yang dipanggil pelapisan protokol

ICMPICMPKluster protokol TCP/IP bukan sahaja merujuk kepada protokol TCP dan IP, tetapi kerana kedua-dua protokol ini terlalu keluar dari bulatan, TCP/IP. digunakan untuk merujuk secara kolektif kepada koleksi protokol yang berkaitan dengan Internet 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

Jika aksara menjadi Artikel untuk bercakap tentang modul bersih dalam Node dan

, aliran penghantaran adalah seperti berikut:

发送者 接受者

Ia dapat dilihat bahawa semasa proses penghantaran, dari penghantaran bermula dari akhir penerimaan, maklumat header yang diperlukan akan ditambah tanpa melalui lapisan protokol dan pengekodan lapisan demi lapisan. Kemudian apabila ia datang ke bahagian penerima, ia akan melakukan sebaliknya, menanggalkan pengepala yang sepadan selepas setiap lapisan Hanya tunggu sehingga tamat data HTTP.Artikel untuk bercakap tentang modul bersih dalam Node

Gambar di atas adalah daripada "Illustrated HTTP"

Di atas ialah model protokol rangkaian umum.

Ragu: Mengapa 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

Jabatan tangan pertama: Pelanggan menghantar bit bendera SYN (nombor jujukan ialah J) ke pelayan, dan memasuki keadaan SYN_SENT (menunggu pengesahan daripada pelayan)Artikel untuk bercakap tentang modul bersih dalam Node

Jabatan tangan Kedua Kedua: Pelayan menerima SYN J daripada klien Pelayan akan mengesahkan 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 penerimaan dan tunggu status pengesahan pelanggan)

Jabatan tangan ketiga: Selepas pelanggan memasuki keadaan penubuhan sambungan, ia menghantar bit bendera ACK (K+ 1) ke pelayan untuk mengesahkan bahawa klien telah menerima penubuhan sambungan, dan pelayan Selepas menerima 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

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);

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 有错误的信息
});
.

: 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
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); // 客户端发送过来的数据
  });
});

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

(sudah tentu 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("我已经收到你的服务器了哦,客户端");

socket.on('close‘)Masukkan ringkasan

acara ke dalam
socket.on("close", () => {
  console.log("客户端把另外一头的流给关了");
});
. 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 有错误的信息
});

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("连接已关闭了");
});

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

Untuk lebih banyak nod- pengetahuan berkaitan, sila lawati:

tutorial nodejs

!

Atas ialah kandungan terperinci Artikel untuk bercakap tentang modul bersih dalam Node. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam