ノードは、リッチネットワークプログラミングモジュールを提供します
| ノードモジュール | プロトコル |
| ネット | TCP |
| dgram | UDP |
| http | http |
| https | https |
TCPサービスイベントは、次の2つのカテゴリに分かれています
(1)サーバーイベント
net.createServer()を介して作成されたサーバーの場合、これはEventeMitterインスタンスであり、いくつかのカスタムイベントがあります。
リスニング:server.listen(ポート、リスナー)として省略されたポートまたはドメインソケットにバインドされるようにlisten()を呼び出した後にトリガーされ、2番目のパラメーターを通過しました。
接続:各クライアントソケットがサーバーに接続されているときにトリガーされます。簡単な方法は、最後のパラメーターをnet.createserver()に渡すことです。
閉じる:サーバーが閉じたときにトリガーされます。 server.close()を呼び出すと、サーバーは新しいソケット接続の受け入れを停止しますが、現在既存の接続を保持し、すべての接続が切断されるのを待ちます。このイベントはトリガーされます。
エラー:このイベントは、サーバーで例外が発生したときにトリガーされます。
(2)接続イベント
サーバーは、複数のクライアントとの接続を同時に維持できます。これは、接続ごとに典型的な書き込み可能なストリームオブジェクトです。ストリームオブジェクトは、サーバーとクライアント間の通信に使用できます。一方の端からデータイベントを介して送信されたデータを読み取るか、write()メソッドを介して一方の端からもう一方の端にデータを送信できます。
データ:1つの側がwrite()を呼び出してデータを送信すると、もう一方の側がデータイベントをトリガーします。イベントで渡されたデータは、write()によって送信されたデータです。
終了:このイベントは、接続のいずれかの端がFINデータを送信するとトリガーされます。
接続:このイベントはクライアントに使用され、ソケットがサーバーに正常に接続されたときに起動されます。
ドレイン:いずれかの端がwrite()を呼び出してデータを送信すると、現在の端がイベントをトリガーします。
エラー:例外が送信されたとき
閉じる:ソケットが完全に閉じられているときに発射されます
タイムアウト:一定期間後に接続がアクティブになった場合、イベントをトリガーして、接続がアイドル状態であることをユーザーに通知します。
TCPには、ネットワーク内の小さなデータパケットの特定の最適化戦略:Nagleアルゴリズムがあります。これは、データが一定の量に達した場合にのみトリガーされます。
UDPサービス
UDPはユーザーパケットプロトコルと呼ばれ、接続指向のサービスではありません。 NodeのUDPは、次のカスタムイベントを備えたストリームインスタンスではなく、EventeMitterインスタンスにすぎません。
(1)メッセージ:UDPソケットがネットワークカードポートを監視してメッセージを受信すると、トリガーによって運ばれるデータはメッセージバッファオブジェクトとリモートアドレス情報です。
(2)リスニング:このイベントは、UDPソケットがリスニングを開始したときにトリガーされます。
(3)閉じる:このイベントは、close()メソッドが呼び出されたときにトリガーされ、メッセージイベントがトリガーされなくなります。メッセージイベントを再度トリガーする必要がある場合は、反抗する必要があります。
(4)エラー:例外が発生したときにトリガーされます。聞いていない場合は、直接スローされ、プロセスが終了します。
HTTPサービス
ノードのHTTPモジュールは、複数のクライアントとの接続を維持できるTCPサーバー(ネットモジュール)から継承します。接続ごとにスレッドを作成せず、メモリフットプリントが非常に低く維持されるため、高い並行性を実現できます。 HTTPサービスとTCPサービスの違いは、KeepAliveが有効になった後、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リクエストヘッダーが解析された後にイベントがトリガーされます。 Res.End()後、TCP接続を次のリクエストに使用できます。
閉じる:server.closeメソッドを呼び出して新しい接続の受信を停止し、既存のすべての接続が切断されたときにこのイベントをトリガーします。
CheckContinue:一部のクライアントがより大きなデータを送信すると、最初に予想を持ってリクエストを送信します。ヘッダーに100回の継続がサーバーに、サービスはイベントをトリガーします。
接続:クライアントが接続要求を開始したときにトリガーされます
アップグレード:クライアントが接続プロトコルのアップグレードを必要とする場合、サーバーとネゴシエートする必要があります。クライアントは、リクエストヘッダーにUpdagradeフィールドをもたらします。
ClientError:接続されたクライアントはエラーを送信し、エラーがサーバーに送信され、イベントがトリガーされます。
(4)HTTPクライアント
HTTPモジュールは、HTTPクライアントを構築するためのHTTP.Request(Options、Connect)を提供します。
HTTPクライアントはサーバーに似ています。 ClientRequestオブジェクトでは、そのイベントは応答と呼ばれます。 ClientRequestが応答メッセージを解析すると、応答ヘッダーが解析されるとすぐに応答イベントがトリガーされます。同時に、操作のために応答オブジェクトClientResponseが渡されます。後続の応答メッセージは、読み取り専用のストリームで提供されます。
(5)HTTPクライアントイベント
応答:サーバー上のリクエストイベントに対応するクライアントは、リクエストが発行された後にリクエストが応答されたときにイベントをトリガーします。
ソケット:基礎となる接続プールに確立された接続が現在の要求オブジェクトに割り当てられたときに発射されます。
接続:クライアントがサーバーに接続要求を送信すると、サーバーが200ステータスコードに応答する場合、クライアントはイベントをトリガーします。
アップグレード:クライアントがサーバーがアップグレードリクエストを送信したときにクライアントがアップグレードリクエストを享受したとき、サーバーが101スイッチングプロトコルのステータスに応答する場合、クライアントはイベントをトリガーします。
続行:クライアントが予想を開始した後:100を獲得したヘッダー情報をサーバーに送信すると、より大きなデータを送信しようとします。サーバーが100の連続状態に応答する場合、サーバーはイベントをトリガーします
WebSocketサービス
WebSocketは最初にHTML5の重要な機能として表示され、HTTPよりも次の利点があります。
(1)クライアントとサーバーはTCP接続を1回だけ確立し、使用できる接続を少なくすることができます
(2)WebSocket Serverはデータをクライアントにプッシュできます。これは、HTTP要求応答モードよりもはるかに柔軟で効率的です
(3)データ送信を減らすための軽量プロトコルヘッダー
ノードにWebSocketに組み込まれたライブラリ組み込みはありませんが、コミュニティのWSモジュールは、有名なsocket.ioのようなWebSocketの基礎となる実装をカプセル化しています。