目次
3.1 service.js パート
ホームページ ウェブフロントエンド jsチュートリアル Nodeのネットモジュールについて語る記事

Nodeのネットモジュールについて語る記事

Feb 09, 2023 pm 08:00 PM
node.js node ネットモジュール

ネット モジュールは Node.js で提供され、カプセル化と TCP およびソケットのサポートを提供します。この記事では、Node の net モジュールについて紹介します。

Nodeのネットモジュールについて語る記事

以前チュートリアルを見たとき、その多くは IO、バッファー、パス、イベント、fs、プロセス、ノードのイベント ループ メカニズムから始まりました。確かに、ノード開発が依存する主要な開発依存関係について説明します。しかし、私は非常に不安です。ノードについて学んだときから、それはノードがバックエンドを実行できることを意味しますが、これらのコースの前半はすべてノードが持つ機能についてです。クライアント通信モジュールの紹介

非常に違和感があるので、自分でまとめを書く際には、サーバーとクライアント間の通信モジュールを書かなければなりません。イベント モジュールと fs モジュールがプロセスに関与している場合でも、当面は知識ポイントを脇に置き、net モジュールが全体として通信をどのように実装するかを理解するだけで問題ありません。

1. OSI 7 層プロトコル モデル

通信モジュールを学びたい場合は、ネットワーク通信モデルを理解する必要があります。ネットワークを覚えたい場合は、ネットワーク通信モデルを理解する必要があります。コミュニケーションモデルは、記憶を助けるために練習する必要があります。これがインタビューの焦点です。この分野には多くの内容があり、より深く理解したいです。また、体系的な学習が必要であるとも述べました。ここにあります」簡単に言及します。 [推奨される関連チュートリアル:

nodejs ビデオ チュートリアル プログラミング教育 ]

この古い写真を送信してください:

Nodeのネットモジュールについて語る記事 ##フロントエンドでは、TCP/IP プロトコル クラスターのシステム結果を記憶する必要があります。

    アプリケーション層: http(80 ポート)、FTP(21)、SMTP(メールの送信)、POP (メール受信)、DNS
  • トランスポート層: TCP/UDP
  • インターネット層: IP、ICMP (IP 層アクセサリです)プロトコル)
  • データリンク層: PPP、SLIP
  • 物理層: ネットワークにはツイストペア、同軸ケーブル、光ファイバー、その他の伝送が含まれますメソッドは ISO2110 仕様に準拠しています
  • IP プロトコルに付属するプロトコルである
ICMP

から、あまり厳密に行う必要はないことがわかります。ネットワーク プロトコルの階層化 ICMP 基礎として IP プロトコルが必要であることは明らかですが、ネットワーク層としても計画されています。OSI モデルについての正しい理解は、OSI モデルを使用して次のことを行うべきであると思います。いわゆるプロトコルを使用するのではなく、問題を分析します。階層化の方が意味があります。

TCP/IP プロトコル クラスターは、TCP プロトコルと IP プロトコルだけを指すのではなく、これら 2 つのプロトコルが含まれるためです。 TCP/IP は、インターネットを総称するために使用されます。関連するプロトコルが集まったものです。別の言い方をすると、TCP/IP プロトコルを使用するプロセスで使用されるプロトコル ファミリの総称です。 .

クライアントとサーバーの送信フローは次のとおりです

##役割が Nodeのネットモジュールについて語る記事sender

になった場合受信者の場合、送信フローは次のとおりです。

送信プロセス中に、送信側から開始して、必要なヘッダー情報が追加されることがわかります。プロトコルの層を通過せずに、チェックの層、コーディングの層ごとに、受信側になると、代わりに、各層の後で対応するヘッダーが剥がされます。最終的に HTTP データが取得されるまで待つだけです。Nodeのネットモジュールについて語る記事

上の図は「図解 HTTP」から引用です。

上 これは一般的なネットワーク プロトコル モデルです。

疑問: ネットワークの名前がなぜそうなるのかOSI システムの結果を TCP/IP 5 層プロトコルに統合すると、この層はインターネット層になると書籍や多くの場所で書かれています?

2. TCP 接続

#最初のハンドシェイク: クライアントは SYN フラグ (シーケンス番号は J) をサーバーに送信し、SYN_SENT 状態に入ります (サーバーが状態を確認するのを待ちます)

Nodeのネットモジュールについて語る記事2 回目のハンドシェイク: サーバーはクライアントから SYN J を受信し、データ パケットが受信されたことを確認し、ACK フラグ (シーケンス番号は J 1) と SYN フラグ ビット (シーケンス番号は K) を送信します。 SYN_REVD 状態に入ります (リクエスト受諾およびクライアント確認待ち状態)

3 回目のハンドシェイク: クライアントは接続確立状態に入った後、サーバーに ACK を送信しますフラグ ビット (K 1)、クライアントが接続を確立していることを確認します。確立された接続を受信しました。サーバーが ACK フラグを受信した後、サーバーは接続確立状態に入ります。

J と K は両方とも接続に誰が参加しているかを確立するために使用されます。リクエストはありません。 SYN と ACK の構造は異なりますが、送信されるオブジェクトが異なります。

3. net module

net moduleItは、上記の TCP 接続の具体的な実装です。

まず第一に、API を学ぶには、公式ドキュメントに直接アクセスすることをお勧めします。中国語のドキュメントの内容は最新バージョンではありません

学習するとき、英語の文書を読む時間があるときは、英語の文書を読むようにしています。これを半年にわたって主張してきました。最初は我慢できませんでしたが、今では我慢できます不快感を感じて読んでください。半年で進歩は明らかでした。そしてこの種の不快感は良いことであり、それはここがあなたのコンフォートゾーンではないことを意味します結局のところ、コンフォートゾーンを超える勇気が進歩の源です

次に、本題に入ります。通信を学びたいので、クライアントとサーバーをシミュレートする 2 つのオブジェクトが必要です。2 つのファイル client.js と # を作成します。 ##service.js をそれぞれコマンド ラインで作成します:

touch client.js && touch service.js
ログイン後にコピー

3.1 service.js パート

net を紹介します。モジュールを開き、サーバーを LISTENT 状態にし、ポート番号とホスト アドレスを構成し (DNS 解決プロセスを手動でスキップします)、クライアントの呼び出しを待ちます

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

const server = net.createServer();
server.listen(post, host);
ログイン後にコピー

この時点で、サーバーは、TCP 接続サーバーに対応します。

LISTEN ステータス。

その後、いくつかの必要なイベントを監視し、サーバーによって提供されるフックです。(イベント関連の知識に属します)

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

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

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

server.on("error", (error) => {
  console.log("服务器出错啦: ", error); // error 有错误的信息
});
ログイン後にコピー

上記のコード文字列には、

  • listening: ポートをリッスンした後にトリガーされるイベント
  • connection:クライアントがアクセスするとイベントがトリガーされます
  • close: サーバーが閉じられるとイベントがトリガーされます
  • error: サーバー エラー トリガー

close については、バックグラウンド ブラザーが通常、直接

ps
kill -9 pid
ログイン後にコピー

によってスレッドを強制終了することに注意する必要があります。 , 仮パラメータはソケット名です。その中国語訳はネストされた単語であり、ノードごとにストリームにカプセル化されます。大まかに理解すると、クライアントによって送信されたデータです。これは、データ自体が独自のメソッドを持っています。 process

socket

in

connection

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

  socket.on("data", (data) => {
    console.log(data); // 客户端发送过来的数据
  });
});
ログイン後にコピー
stream 後ほど記事で紹介します

サーバーがデータを受け取れるので
socket.on

に記述します (もちろん外部に記述しても構いません):

socket.write("我已经收到你的服务器了哦,客户端");
ログイン後にコピー
このとき、クライアントがデータの受け入れを完了し、接続を閉じます。

socket.on('close') を渡すこともできます。フックは次のものをリッスンします:

socket.on("close", () => {
  console.log("客户端把另外一头的流给关了");
});
ログイン後にコピー

socket の概要イベントは client.js

に置かれます。 この時点での

service.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 有错误的信息
});
ログイン後にコピー
3.2 client.js 部分

クライアント側は、 simpler.

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

connect のイベントの概要: サーバーへの接続成功によってトリガーされます

  • data : サーバーから送信されたパラメータを受信
  • end: データ受信完了後にトリガー
  • close: トリガータイミングソケットが閉じられています
  • service.js および
  • client.js
フレームワークが作成されました。2 つのターミナルを開いて実行します:

node service.js
node client.js
ログイン後にコピー
印刷結果は自分で見てください .TCP 接続のフレームワークはほぼ完成しました。もちろん、実際の制作はそれだけではありません。スティッキー パケット、アンパッキング/パッケージング、ハートビートなども処理する必要があります。

この記事は、https://juejin.cn/post/7084618854801866765

著者: 私はリトルオレンジです

#ノード関連の知識については、

nodejs チュートリアル

を参照してください。

以上がNodeのネットモジュールについて語る記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Node V8 エンジンのメモリと GC の詳細な図による説明 Node V8 エンジンのメモリと GC の詳細な図による説明 Mar 29, 2023 pm 06:02 PM

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

Nodeのメモリ制御に関する記事 Nodeのメモリ制御に関する記事 Apr 26, 2023 pm 05:37 PM

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

Express を使用してノード プロジェクトでファイルのアップロードを処理する方法 Express を使用してノード プロジェクトでファイルのアップロードを処理する方法 Mar 28, 2023 pm 07:28 PM

ファイルのアップロードをどのように処理するか?次の記事では、Express を使用してノード プロジェクトでファイルのアップロードを処理する方法を紹介します。

Node の File モジュールについて詳しく説明しましょう Node の File モジュールについて詳しく説明しましょう Apr 24, 2023 pm 05:49 PM

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

Nodeのプロセス管理ツール「pm2」を徹底分析 Nodeのプロセス管理ツール「pm2」を徹底分析 Apr 03, 2023 pm 06:02 PM

この記事では、Node のプロセス管理ツール「pm2」について説明し、pm2 が必要な理由、pm2 のインストール方法と使用方法について説明します。皆様のお役に立てれば幸いです。

Nodeのイベントループについて話しましょう Nodeのイベントループについて話しましょう Apr 11, 2023 pm 07:08 PM

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。

PIノードティーチング:PIノードとは何ですか? PIノードをインストールしてセットアップする方法は? PIノードティーチング:PIノードとは何ですか? PIノードをインストールしてセットアップする方法は? Mar 05, 2025 pm 05:57 PM

ピン張りのノードの詳細な説明とインストールガイドこの記事では、ピネットワークのエコシステムを詳細に紹介します - PIノードは、ピン系生態系における重要な役割であり、設置と構成の完全な手順を提供します。 Pinetworkブロックチェーンテストネットワークの発売後、PIノードは多くの先駆者の重要な部分になり、テストに積極的に参加し、今後のメインネットワークリリースの準備をしています。まだピン張りのものがわからない場合は、ピコインとは何かを参照してください。リストの価格はいくらですか? PIの使用、マイニング、セキュリティ分析。パインワークとは何ですか?ピン競技プロジェクトは2019年に開始され、独占的な暗号通貨PIコインを所有しています。このプロジェクトは、誰もが参加できるものを作成することを目指しています

ノードのバッファーについて詳しく見る ノードのバッファーについて詳しく見る Apr 25, 2023 pm 07:49 PM

当初、JS はブラウザ側でのみ動作していたため、Unicode でエンコードされた文字列の処理は簡単でしたが、バイナリ文字列や非 Unicode エンコード文字列の処理は困難でした。バイナリは、コンピュータのビデオ/オーディオ/プログラム/ネットワーク パッケージの最低レベルのデータ形式です。

See all articles