NodeJS学習メモ ネットワークプログラミング_node.js
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 の基礎となる実装をカプセル化します

ホット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)

ホットトピック









C++ は、次の機能をカバーするオープン ソース ライブラリの豊富なセットを提供します: データ構造とアルゴリズム (標準テンプレート ライブラリ) マルチスレッド、正規表現 (Boost) 線形代数 (Eigen) グラフィカル ユーザー インターフェイス (Qt) コンピューター ビジョン (OpenCV) 機械学習(TensorFlow) 暗号化 (OpenSSL) データ圧縮 (zlib) ネットワーク プログラミング (libcurl) データベース管理 (sqlite3)

MySQL データベースに接続するには、次の手順に従う必要があります。 mysql2 ドライバーをインストールします。 mysql2.createConnection() を使用して、ホスト アドレス、ポート、ユーザー名、パスワード、データベース名を含む接続オブジェクトを作成します。 connection.query() を使用してクエリを実行します。最後に connection.end() を使用して接続を終了します。

C++ 標準ライブラリは、ネットワーク プログラミングで DNS クエリを処理する関数を提供します。 gethostbyname(): ホスト名に基づいてホスト情報を検索します。 gethostbyaddr(): IP アドレスに基づいてホスト情報を検索します。 dns_lookup(): DNS を非同期的に解決します。

Node.js と Java の主な違いは、設計と機能です。 イベント駆動型とスレッド駆動型: Node.js はイベント駆動型で、Java はスレッド駆動型です。シングルスレッドとマルチスレッド: Node.js はシングルスレッドのイベント ループを使用し、Java はマルチスレッド アーキテクチャを使用します。ランタイム環境: Node.js は V8 JavaScript エンジン上で実行され、Java は JVM 上で実行されます。構文: Node.js は JavaScript 構文を使用し、Java は Java 構文を使用します。目的: Node.js は I/O 集中型のタスクに適しており、Java は大規模なエンタープライズ アプリケーションに適しています。

Node.js で MyCAT に接続する手順: mycat-ts 依存関係をインストールします。接続プールを作成し、ホスト、ポート、ユーザー名、パスワード、データベースを指定します。 SQL クエリを実行するには、query メソッドを使用します。接続プールを閉じるには、close メソッドを使用します。

C++ 関数は、ネットワーク プログラミングでネットワーク セキュリティを実現できます。その方法には、1. 暗号化アルゴリズム (openssl) を使用して通信を暗号化する、2. デジタル署名 (cryptopp) を使用してデータの整合性と送信者の身元を確認する、3. クロスサイト スクリプティング攻撃に対する防御、および( htmlcxx) ユーザー入力をフィルタリングしてサニタイズします。

Node.js は JavaScript ランタイム環境であり、npm はそのパッケージ マネージャーです。この 2 つが連携することで、開発者は JavaScript でサーバー側プログラムを作成し、サードパーティ モジュールを使用し、モジュールを簡単に管理できるようになります。

Node.js は、次のプロジェクト タイプに適しています。 ネットワークおよびサーバー アプリケーション イベント駆動型アプリケーション リアルタイム アプリケーション データ集約型アプリケーション コマンドライン ツールとスクリプト 軽量マイクロサービス
