Nodeのネットモジュールについて語る記事
ネット モジュールは Node.js で提供され、カプセル化と TCP およびソケットのサポートを提供します。この記事では、Node の net モジュールについて紹介します。
以前チュートリアルを見たとき、その多くは IO、バッファー、パス、イベント、fs、プロセス、ノードのイベント ループ メカニズムから始まりました。確かに、ノード開発が依存する主要な開発依存関係について説明します。しかし、私は非常に不安です。ノードについて学んだときから、それはノードがバックエンドを実行できることを意味しますが、これらのコースの前半はすべてノードが持つ機能についてです。クライアント通信モジュールの紹介
非常に違和感があるので、自分でまとめを書く際には、サーバーとクライアント間の通信モジュールを書かなければなりません。イベント モジュールと fs モジュールがプロセスに関与している場合でも、当面は知識ポイントを脇に置き、net
モジュールが全体として通信をどのように実装するかを理解するだけで問題ありません。
1. OSI 7 層プロトコル モデル
通信モジュールを学びたい場合は、ネットワーク通信モデルを理解する必要があります。ネットワークを覚えたい場合は、ネットワーク通信モデルを理解する必要があります。コミュニケーションモデルは、記憶を助けるために練習する必要があります。これがインタビューの焦点です。この分野には多くの内容があり、より深く理解したいです。また、体系的な学習が必要であるとも述べました。ここにあります」簡単に言及します。 [推奨される関連チュートリアル:nodejs ビデオ チュートリアル 、プログラミング教育 ]
この古い写真を送信してください: ##フロントエンドでは、TCP/IP プロトコル クラスターのシステム結果を記憶する必要があります。
- アプリケーション層: http(80 ポート)、FTP(21)、SMTP(メールの送信)、POP (メール受信)、DNS
- トランスポート層: TCP/UDP
- インターネット層: IP、ICMP (IP 層アクセサリです)プロトコル)
- データリンク層: PPP、SLIP
- 物理層: ネットワークにはツイストペア、同軸ケーブル、光ファイバー、その他の伝送が含まれますメソッドは ISO2110 仕様に準拠しています
- IP プロトコルに付属するプロトコルである
から、あまり厳密に行う必要はないことがわかります。ネットワーク プロトコルの階層化 ICMP
基礎として IP プロトコルが必要であることは明らかですが、ネットワーク層としても計画されています。OSI モデルについての正しい理解は、OSI モデルを使用して次のことを行うべきであると思います。いわゆるプロトコルを使用するのではなく、問題を分析します。階層化の方が意味があります。
クライアントとサーバーの送信フローは次のとおりです
##役割が sender
になった場合受信者の場合、送信フローは次のとおりです。
送信プロセス中に、送信側から開始して、必要なヘッダー情報が追加されることがわかります。プロトコルの層を通過せずに、チェックの層、コーディングの層ごとに、受信側になると、代わりに、各層の後で対応するヘッダーが剥がされます。最終的に HTTP データが取得されるまで待つだけです。
上の図は「図解 HTTP」から引用です。
疑問: ネットワークの名前がなぜそうなるのかOSI システムの結果を TCP/IP 5 層プロトコルに統合すると、この層はインターネット層になると書籍や多くの場所で書かれています?上 これは一般的なネットワーク プロトコル モデルです。
2. TCP 接続
#最初のハンドシェイク: クライアントは SYN フラグ (シーケンス番号は J) をサーバーに送信し、SYN_SENT 状態に入ります (サーバーが状態を確認するのを待ちます)
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);
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
socket
inconnection
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
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("连接已关闭了"); });
connect
のイベントの概要: サーバーへの接続成功によってトリガーされます
- data
: サーバーから送信されたパラメータを受信
- end
: データ受信完了後にトリガー
- close
: トリガータイミングソケットが閉じられています
service.js
および client.js
node service.js node client.js
印刷結果は自分で見てください .
TCP 接続のフレームワークはほぼ完成しました。もちろん、実際の制作はそれだけではありません。スティッキー パケット、アンパッキング/パッケージング、ハートビートなども処理する必要があります。
この記事は、https://juejin.cn/post/7084618854801866765
著者: 私はリトルオレンジです
#ノード関連の知識については、nodejs チュートリアル
を参照してください。
以上がNodeのネットモジュールについて語る記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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