Node は豊富なネットワーク プログラミング モジュールを提供します
Node模块 | 协议 |
net | TCP |
dgram | UDP |
http | HTTP |
https | HTTPS |
TCP サービス イベントは次の 2 つのカテゴリに分類されます
(1)、サーバーイベント
net.createServer() によって作成されたサーバーの場合、それは EventEmitter インスタンスです。次のタイプのカスタム イベントがあります。
listening: listen() を呼び出してポートまたはドメイン ソケット (server.listen(port,listener) と略称) をバインドした後にトリガーされ、2 番目のパラメーターを通じて渡されます。connection: 各クライアント ソケットがサーバーに接続するときにトリガーされます。これを記述する簡潔な方法は net.createServer() を介して行われ、最後のパラメーターが渡されます。
close: サーバーが閉じられるとトリガーされます。server.close() を呼び出した後、サーバーは新しいソケット接続の受け入れを停止しますが、現在の既存の接続は保持します。このイベントは、すべての接続が切断された後にトリガーされます。
error: このイベントは、サーバーで例外が発生したときにトリガーされます。
(2)、
接続イベント
サーバーは複数のクライアントとの接続を同時に維持でき、接続ごとに書き込みと読み取りが可能な一般的な Stream オブジェクトです。 Stream オブジェクトは、サーバーとクライアント間の通信に使用でき、データ イベントを通じて一方の端からもう一方の端にデータを読み取ることも、write() メソッドを通じて一方の端からもう一方の端にデータを送信することもできます。data: 一方の端が write() を呼び出してデータを送信すると、もう一方の端が data イベントをトリガーします。イベントによって渡されたデータは write()
によって送信されたデータです。
end: このイベントは、接続のどちらかの端が FIN データを送信するとトリガーされます。connect: このイベントはクライアントに使用され、ソケットがサーバーに正常に接続されたときにトリガーされます。
drain: いずれかのエンドが write() を呼び出してデータを送信すると、現在のエンドがこのイベントをトリガーします。
エラー: 例外
の場合に送信されます。
close: ソケットが完全に閉じられたときにトリガーされますtimeout: 一定期間が経過して接続がアクティブでなくなると、このイベントがトリガーされ、接続がアイドル状態であることがユーザーに通知されます。
TCP には、ネットワーク内の小さなデータ パケットに対する特定の最適化戦略があります。それは、データが一定量に達した場合にのみトリガーされる Nagle アルゴリズムです。
UDP サービス
UDP はユーザー データグラム プロトコルと呼ばれ、接続指向のサービスではありません。 Node の UDP は Stream インスタンスではなく単なる EventEmitter インスタンスであり、次のカスタム イベントがあります:(1) メッセージ: UDP ソケットがネットワーク カード ポートをリッスンしてメッセージを受信するとトリガーされます。トリガーによって伝送されるデータは、メッセージ バッファー オブジェクトとリモート アドレス情報です。
(2) listen: このイベントは、UDP ソケットが listen を開始するとトリガーされます。
(3) close: このイベントは close() メソッドが呼び出されたときにトリガーされ、message イベントはトリガーされなくなります。メッセージ イベントを再度トリガーする必要がある場合は、再バインドする必要があります。
(4) エラー: 例外が発生するとトリガーされ、監視されていない場合は、直接スローされてプロセスが終了します。
HTTP サービス
Node の http モジュールは tcp サーバー (net モジュール) から継承され、接続ごとにスレッドを作成せず、メモリ使用量を非常に低く維持できるため、高い同時実行性を実現できます。 HTTP サービスと TCP サービスの違いは、キープアライブを有効にすると、TCP セッションを複数の要求と応答に使用できることです。 TCPサービスはコネクション単位で提供され、HTTPサービスはリクエスト単位で提供されます。 http モジュールは、接続からリクエストまでのプロセスをカプセル化します。http モジュールは、接続に使用されるソケットの読み取りと書き込みを ServerRequest オブジェクトと ServerResponse オブジェクトに抽象化します。これらのオブジェクトは、それぞれ要求操作と応答操作に対応します。
(1) HTTPリクエスト
TCP 接続での読み取り操作の場合、http モジュールはそれらを ServerRequest オブジェクトとしてカプセル化します。たとえば、ヘッダー部分は req.method、req.url、req.headers であり、メッセージ本文のデータ部分は読み取り専用のストリーム オブジェクトとして抽象化されます。ビジネス ロジックがメッセージ本文のデータを読み取る必要がある場合は、メッセージ本文のデータ部分が読み取り専用のストリーム オブジェクトとして抽象化されます。動作するにはデータ フローを完了する必要があります。
(2) HTTPレスポンス
HTTP 応答は、基礎となる接続の書き込み操作をカプセル化し、書き込み可能なストリーム オブジェクトとして表示できます。
応答メッセージのヘッダー情報メソッド: res.setHeader() メソッドと res.writeHeader() メソッド。setHeader は複数回実行できますが、接続を有効にするには writeHeader を呼び出して書き込む必要があります。
メッセージ本文メソッドの一部: res.write() メソッドと res.end() メソッド
(3) HTTP サーバーイベント
接続: クライアントがサーバーとの TCP 接続を確立すると、接続イベントがトリガーされます
リクエスト: TCP 接続を確立した後、http モジュールの最下層はデータ ストリームから HTTP リクエストと HTTP レスポンスを抽象化し、リクエスト データがサーバーに送信されると、HTTP リクエスト ヘッダーを解析した後にイベントがトリガーされます。 ; in res.end() その後、TCP 接続は次のリクエストに使用できるようになります。
close: 新しい接続の受信を停止するには、server.close メソッドを呼び出します。このイベントは、既存の接続がすべて切断されたときにトリガーされます。
checkContinue: 一部のクライアントが大きなデータを送信する場合、最初にヘッダーに Expect: 100- continue を含むリクエストをサーバーに送信し、サービスがこのイベントをトリガーします。
connect: クライアントが CONNECT リクエストを開始するとトリガーされます
upgrade: クライアントが接続プロトコルのアップグレードをリクエストする場合、サーバーとネゴシエートする必要があり、クライアントはリクエスト ヘッダーに Updagrade フィールドを含めます
clientError: 接続されたクライアントがエラーを送信し、エラーがサーバーに送信されると、このイベントがトリガーされます
(4) HTTP クライアント
http モジュールは、HTTP クライアントを構築するための http.request(options, connect) を提供します。
ClientRequest オブジェクトでは、HTTP クライアントは応答と呼ばれ、応答ヘッダーが解析されるとすぐに応答イベントがトリガーされます。後続の応答メッセージは読み取り専用ストリームとして提供されます。
(5) HTTP クライアント イベント
response: このイベントは、サーバーのリクエストイベントに対応するクライアントがリクエストの発行後にレスポンスを受信したときにトリガーされます。
ソケット: 基礎となる接続プールで確立された接続が現在のリクエスト オブジェクトに割り当てられるとトリガーされます。
connect: クライアントがサーバーに CONNECT リクエストを送信し、サーバーがステータス コード 200 で応答すると、クライアントはこのイベントをトリガーします。upgrade: クライアントがアップグレード リクエストをサーバーに送信したときに、サーバーが 101 スイッチング プロトコル ステータスで応答すると、クライアントはこのイベントをトリガーします。
Continue: クライアントは、Expect: 100- continue ヘッダーをサーバーに送信した後、より大きなデータを送信しようとします。サーバーが 100 continue ステータスで応答すると、サーバーはこのイベントをトリガーします。
WebSocket サービス
WebSocket は HTML5 の重要な機能として初めて登場しましたが、HTTP と比較して次のような利点があります。(1) クライアントとサーバーは TCP 接続を 1 つだけ確立するため、使用できる接続数は少なくなります
(2) WebSocket サーバーはクライアントにデータをプッシュできます。これは、HTTP リクエスト応答モードよりもはるかに柔軟で効率的です
(3) プロトコルヘッダーの軽量化、データ送信の削減
Node には組み込みの WebSocket ライブラリはありませんが、コミュニティの ws モジュールは、有名なソケット.io などの WebSocket の基礎となる実装をカプセル化します