ネット モジュールは 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);この時点で、サーバーは、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
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
connect
のイベントの概要: サーバーへの接続成功によってトリガーされます
- data
: サーバーから送信されたパラメータを受信
- end
: データ受信完了後にトリガー
- close
: トリガータイミングソケットが閉じられています
-
service.js
および client.js
node service.js node client.js
印刷結果は自分で見てください .
TCP 接続のフレームワークはほぼ完成しました。もちろん、実際の制作はそれだけではありません。スティッキー パケット、アンパッキング/パッケージング、ハートビートなども処理する必要があります。
この記事は、https://juejin.cn/post/7084618854801866765
著者: 私はリトルオレンジです
#ノード関連の知識については、nodejs チュートリアル
を参照してください。
以上がNodeのネットモジュールについて語る記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

WebStorm Mac版
便利なJavaScript開発ツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
