ホームページ ウェブフロントエンド jsチュートリアル NodeJS学習メモ ネットワークプログラミング_node.js

NodeJS学習メモ ネットワークプログラミング_node.js

May 16, 2016 pm 04:40 PM
nodejs ネットワークプログラミング

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 の基礎となる実装をカプセル化します

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C++ オープンソース ライブラリとは何ですか? C++ オープンソース ライブラリとは何ですか? Apr 22, 2024 pm 05:48 PM

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

Nodejsをmysqlデータベースに接続する方法 Nodejsをmysqlデータベースに接続する方法 Apr 21, 2024 am 06:13 AM

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

C++ 関数はネットワーク プログラミングで DNS クエリをどのように処理しますか? C++ 関数はネットワーク プログラミングで DNS クエリをどのように処理しますか? Apr 27, 2024 pm 06:39 PM

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

NodejsとJavaの間に大きな違いはありますか? NodejsとJavaの間に大きな違いはありますか? Apr 21, 2024 am 06:12 AM

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 は大規模なエンタープライズ アプリケーションに適しています。

Nodejsをmycatに接続する方法 Nodejsをmycatに接続する方法 Apr 21, 2024 am 06:16 AM

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

C++ 関数はネットワーク プログラミングでネットワーク セキュリティをどのように実装しますか? C++ 関数はネットワーク プログラミングでネットワーク セキュリティをどのように実装しますか? Apr 28, 2024 am 09:06 AM

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

Nodejsとnpmの関係は何ですか? Nodejsとnpmの関係は何ですか? Apr 21, 2024 am 06:09 AM

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

Nodejs はどのようなプロジェクトに適していますか? Nodejs はどのようなプロジェクトに適していますか? Apr 21, 2024 am 05:45 AM

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

See all articles