VUE3.0 をすぐに始める方法:
これは Nodejs シリーズの最初の記事です。以前にチュートリアルを読んだとき、その多くは IO、バッファー、パス、イベント、プロセス、およびノード イベント ループ メカニズム。確かに、これらはノード開発が主に依存する開発依存関係です。しかし、ノードについて学んだときから、これらのコースの前半は、ノードが実行できることを意味します。それが持つ機能、つまりクライアント通信のモジュールについて話すのは
非常に不快なので、自分で要約を書くときは、サーバー間で通信するモジュールを書かなければなりません
。イベント モジュールと fs モジュールの知識ポイントがプロセス関与しているとしても、とりあえず脇に置いて、 net
モジュールが全体としてどのように通信を実装するかを理解するだけで済みます。
通信モジュールを学習したい場合は、ネットワーク通信モデルを理解する必要があります。ネットワーク通信モデルを覚えたい場合は、それを練習する必要があります。これがインタビューの焦点です。この分野には多くの内容があり、それを深く理解したいので、体系的な学習も必要です。
この古い写真を簡単に紹介します
。フロントエンドでは、TCP/IP プロトコル スイートのシステム結果を覚えておく必要があります。
アプリケーション層: http (ポート 80)、FTP (21)、SMTP (メール送信)、POP (メール受信)、DNS
トランスポート層
に
準拠
し
た
ツイストペア、同軸ケーブル、光ファイバーなどの伝送方式を備えたネットワーク
ICMP
について IP プロトコルに付属するプロトコルを見れば、ネットワーク プロトコルの階層化についてあまり心配する必要がないことがわかりますが、 ICMP
基盤として IP プロトコルを必要としますが、ネットワーク層としても計画されています。 OSI モデルについての私たちの正しい理解は、いわゆるプロトコルの階層化を使用するよりも、OSI モデルを使用することの方が意味があると考えるべきです。TCP
/IP プロトコル スイートは、単に TCP を指すものではありません。と IP プロトコルがありますが、この 2 つのプロトコルはあまりにも枠から外れているため、TCP が使用されます。 /IP は、インターネットに関連するプロトコルの集合を総称して指します。別の言い方をすると、インターネットで使用されるプロトコル ファミリの総称です。 TCP/IPプロトコルを使用する際の
クライアントとサーバーの通信の流れは以下の通りです。
役割が发送者
と接受者
になった場合、送信の流れは次のようになります。
送信プロセス中に、送信側から始まり、プロトコルの層やコーディングの層を通過することなく、必要なヘッダー情報が追加されることがわかります。各層は、対応するヘッダーを取り除き、最終的な HTTP データが取得されるまで待ちます。
上
の図は、
一般的なネットワーク プロトコル モデルです。
多くの場所で OSI システムの結果が TCP/IP にマージされますか? 5 層プロトコルの後に、ネットワーク層の名前はインターネット層
最初のハンドシェイク: クライアントは SYN フラグ (シーケンス番号は J) をサーバーに送信し、SYN_SENT 状態になります (サーバーからの確認を待ちます)。
2 番目のハンドシェイク: サーバーはクライアントから SYN J を受信し、サーバーは確認します。データ パケットが受信され、ACK フラグ ビット (シーケンス番号は J + 1) と SYN フラグ ビット (シーケンス番号は K) が送信され、SYN_REVD 状態 (要求の受け入れとクライアントの確認待ちの状態) に入る
3 回目のハンドシェイク:クライアントの開始 接続が確立された後、クライアントが確立された接続を受信したことを確認するために ACK フラグ ビット (K+1) がサーバーに送信され、サーバーは接続確立状態
に入ります。J
K はどちらもリクエスト内での接続を確立するために使用されます。SYN と ACK の構造に違いはありませんが、送信されるオブジェクトは異なります。
net模块
上記の TCP 接続の特定の実装です。
まず、API を学ぶには、やはり公式ドキュメントにアクセスすることをお勧めします。中国語のドキュメントの内容は最新版ではないので
、
。時間があるときに英語のドキュメントを読むようにしています
. 最初は我慢できなかったのですが、半年も我慢して読むことができました そして、このような不快感は明らかです。それは良いことです、これはあなたのコンフォートゾーンではないということです。結局のところ
、あなたはコミュニケーションを学びたいので、それを超える勇気が進歩の源です。クライアントとサーバーをシミュレートするオブジェクトを作成します。 client.js
とservice.js
2 つのファイルをそれぞれ作成します。 コマンド ラインで作成します。
touch client.js && touch service.js
net
モジュールを導入し、サーバーはLISTENT
状態に入り、ポート番号とホスト アドレスを設定し (DNS 解決プロセスを手動でスキップします)、クライアントの呼び出しを待ちます。
const net = require("net"); const post = 3306; const ホスト = "127.0.0.1"; const サーバー = net.createServer(); server.listen(post, host);
このとき、サーバーは TCP 接続のサーバーLISTEN
ステータスに対応し
、サーバーによって提供されるいくつかの必要なイベントをリッスンします (イベント関連の知識に属します)。 )
server.on("リスニング", ( ) => { console.log("サーバーに接続できました"); }); server.on("接続", (ソケット) => { console.log("クライアントが訪問しています"); }); server.on("閉じる", () => { console.log("サーバーはシャットダウンされました"); }); server.on("エラー", (エラー) => { console.log("サーバーにエラーがあります: ", error); // エラーに
listening
connection
。
});close
: サーバーシャットダウンエラーによってトリガーされますerror
サーバーエラーによってトリガーされますclose
に関しては、通常、バックグラウンドブラザーが直接
ps を実行するという事実に注意する必要があります。
Kill -9 pid は
スレッドを kill することによって実行されます。
そのconnection
パラメータは、中国語に翻訳されたものであり、ノードごとにストリームにカプセル化されていると理解できます。これは、データ自体connection
socket
サーバーでソケットを処理するためです。on("connection", (socket) => { console.log("クライアントが訪問しています"); ソケット.on("データ", (データ) => { console.log(data); //クライアントによって送信されたデータ}); });
ストリームは今後の記事で紹介します。
サーバーはクライアントから送信されたデータを受け入れることができるため、 socket.on
に書き込むことができます (もちろん、外部に書き込むこともできます)
。 (「サーバーを受信しました、クライアント」);
この時点で、クライアントがデータの受信を完了して接続を閉じたかどうかは、 socket.on('close')
フックを通じて監視することもできます
。 ("閉じる", () => { console.log("クライアントはストリームのもう一方の端をシャットダウンしました");client.js にソケットイベントの概要を
記述
client.js
socket
。このとき、 service.js
の内容はすべて次のようになります
。 const post = 3306; const ホスト = "127.0.0.1"; const サーバー = net.createServer(); サーバー.リッスン(ポスト、ホスト); server.on("リスニング", () => { console.log("サーバーに接続できました"); }); server.on("接続", (ソケット) => { console.log("クライアントが訪問しています"); ソケット.on("データ", (データ) => { console.log(data); //クライアントから送信されたデータです。socket.write("クライアント、サーバーから受信しました"); }); ソケット.on("閉じる", () => { console.log("クライアントはストリームのもう一方の端をシャットダウンしました"); server.close(); // クライアントはデータを必要としなくなったので、サーバーを閉じましょう}); }); server.on("閉じる", () => { console.log("サーバーはシャットダウンされました"); }); server.on("エラー", (エラー) => { console.log("サーバーにエラーがあります: ", error); // エラーにはエラー情報が含まれています。
3.2
const net = require("net"); const post = 3306; const ホスト = "127.0.0.1"; const ソケット = net.connect(post, host); ソケット.on("接続", () => { console.log("すでにサーバーに接続されています"); }); socket.write("サーバー、来ました"); ソケット.on("データ", (データ) => { console.log(data.toString()); ソケット.end(); }); ソケット.on("閉じる", () => { console.log("接続が閉じられました");
socket
イベントの概要
connect
connect
サーバーとの接続が成功するとdata
がトリガーされます : サーバーから送信されたパラメーターを受信しますend
: データを受信した後、close
をトリガーできます : ソケットの close により、service.js
およびclient.js
フレームワーク
2 つのターミナルを開いてから実行してください:
node service.js
もちろん、実際の制作ではスティッキー パケット、アンパッキング/パッケージング、ハートビート パケットなども処理する必要があり
ます
。
この記事はhttps://juejin.cn/post/7084618854801866765から転載されました。
著者:私はリトルオレンジ
です