node.jsイベントキューはどこにありますか?

nbroeking

私はスタックオーバーフローについて同様の質問を見ましたが、それらのどれも私が持っている質問に完全に飛び込むことはありませんか?私はイベントキュー、それらがどのように機能するか、そしてそれらを実装することに精通しています。私はnode.jsを初めて使用し、Node.jsの実行方法に頭を悩ませようとしています。

C ++アプリケーションでは、次のように実行します。

int main(){
    std::vector<Handler*> handlers;
    BlockingQueue queue = new BlockingQueue();
    //Add all the handlers call constructors and other such initialization

    //Then run the event loop
    while(true){
        Event e = queue.pop();

        for( std::vector<Handler>::iterator it = handlers.begin(); it != handlers.end(); ++it){
            *it.handle(e);
         }
     }
}

node.jsの場合、次のようなmain.jsというメインファイルがあるかもしれません。

var http = require("http");
function main(){
    // Console will print the message
    console.log('Server running at http://127.0.0.1:8080/');
    var server = http.createServer(function (request, response) {

        // Send the HTTP header
        // HTTP Status: 200 : OK
        // Content Type: text/plain
        response.writeHead(200, {'Content-Type': 'text/plain'});

        // Send the response body as "Hello World"
        response.end('Hello World\n');
    });

    server.listen(8080);
    console.log('Main completed');
}

main();

server.listenがハンドラーをイベントキューにアタッチしており、c ++の例と同様のコールバックを追加していることを理解しています。

私の質問はです。イベントキューはどこにありますか?それはどこかのJavaScriptにありますか、それともインタープリターに組み込まれていますか?また、メインイベントループに関連してメイン関数はどのように呼び出されますか?

jfriend00

イベントキューはどこにありますか?それはどこかのJavaScriptにありますか、それともインタープリターに組み込まれていますか?

イベントキューは、Javascriptインタープリターをホストするオペレーティング環境に組み込まれています。これはJavascript自体の基本ではないため、実際のJSランタイムの一部ではありません。これを示す興味深い指標の1つsetTimeout()は、実際にはECMAScriptの一部ではなく、ホストによってJavascript環境で利用できるようになっていることです。

node.jsのJavascript実装を取り巻くシステムは、外部でトリガーされたイベント(タイマー、ネットワーキング結果など)を追跡し、Javascriptが何かの実行に忙しくなく、外部イベントが発生すると、関連するJavascriptコールバックをトリガーします。Javascriptが何かの実行でビジー状態の場合、Javascriptはそのイベントをキューに入れ、Javascriptがビジー状態でなくなるとすぐに、キュー内の次のイベントをトリガーできるようにします。

node.js自体libuvがイベントループに使用します。あなたはここでそれについてもっと読むことができますこれは、node.js用に開発されたイベント型の非同期I / Oを実行するマルチプラットフォームの方法を提供しますが、他のいくつかのプロジェクトでも使用されています。

これも役立つかもしれない関連する答えです:

ノードでコールバックを待っている間に任意のコードを実行しますか?

また、メインイベントループに関連してメイン関数はどのように呼び出されますか?

node.jsが起動すると、実行する初期スクリプトファイルが提供されます。そのスクリプトファイルをメモリにロードし、その中のJavascriptを解析して実行します。あなたの特定の例では、それは関数mainを解析させ、次にその実行がmain()その関数を実行する原因になります。

起動時にノードに渡されるスクリプトファイルの読み込み、解析、実行は、node.jsに与えられるタスクです。イベントキューとはまったく関係ありません。一部のnode.jsアプリケーションでは、最初のスクリプトを実行してから終了します(作業は終了します)。他のnode.jsアプリケーションでは、最初のスクリプトがタイマーやサーバーなどを開始し、将来的にイベントを受信します。その場合、node.jsは最初のスクリプトを最後まで実行しますが、作成された永続的なオブジェクトがあり、イベント(この場合はサーバー)をリッスンしているため、nodejsはアプリをシャットダウンしません。これらの将来のイベントが発生したときに受信できるように、実行したままにします。


ここで欠けている部分の1つは、作成したサーバーオブジェクトのようなものを使用すると、特定のイベントが発生したときに1回以上呼び出されるコールバックを登録できることです。この動作はJavascriptに組み込まれていません。代わりに、これらのオブジェクトまたはそれらが使用するTCP関数を実装するコードは、登録されているコールバックのリストを維持する必要があり、これらのイベントが発生すると、適切なコールバックが呼び出されて適切なデータが渡されるようにコードを実行する必要があります。の場合http.createServer()、それを機能させるのは、nodejshttpライブラリ内のJavascriptとネイティブコードの組み合わせです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Node.jsの「keypress」イベントのドキュメントはどこにありますか

分類Dev

node.jsインタープリターはどこにありますか

分類Dev

node.jsイベントキューを検査するにはどうすればよいですか?

分類Dev

Node.jsイベントはどうなりますか?

分類Dev

Node.jsネイティブアドオン:node_api.hはどこにありますか?

分類Dev

Bluemix + Node.js-watson-developer-cloudモジュールのドキュメントはありますか?

分類Dev

Node.jsでイベントを「食べる」方法はありますか?

分類Dev

一般的なNode.jsモジュールのリリースノート/変更ログはどこにありますか

分類Dev

node.jsはどこにインストールされましたか?

分類Dev

Node.jsドライバーからMongoにデータベースが存在するかどうかを確認する方法はありますか?

分類Dev

Node Js と Express: コードを学び、読むための無料のシンプルなプロジェクトはどこにありますか?

分類Dev

Node.jsイベントシステムはAkkaのアクターパターンとどのように異なりますか?

分類Dev

電子フレームワークのローカルnode.jsはどこにありますか?

分類Dev

ES6変数のインポート名はnode.jsにありますか?

分類Dev

Node.jsでまだ受信されていないメッセージはどこにありますか?

分類Dev

新しいイベントがキューに入れられていない場合、node.jsアプリケーションはどのように実行され続けますか?

分類Dev

データベースの移行は Node.js プロジェクトのどこに置かれますか?

分類Dev

固定費のNode.jsホスティングはどこにありますか?

分類Dev

node.jsでmongooseを使用してmongodbベースからドキュメントを取得するにはどうすればよいですか?

分類Dev

Node.jsイベントループが私には意味がありません

分類Dev

Node.js MongoDBエラー:更新操作ドキュメントにはアトミック演算子が含まれている必要があります

分類Dev

websoketを使用してNode.jsイベントループをオーバーロードする方法はありますか

分類Dev

node_redisコマンドの完全なリストはどこにありますか?

分類Dev

どのようにオンラインラジオのライブストリーミング音楽があり、Node.jsで音楽を構築するために利用できるリソースはありますか?

分類Dev

.jsファイルからnode.jsの依存関係を自動的にインストールする方法はありますか?

分類Dev

Node.jsにWCFバイナリデータをフルテキストXML表現に変換する方法はありますか?

分類Dev

Node.JSを起動する前に一部のbashスクリプトが必要とする「プログラム」モジュールはどこにありますか?

分類Dev

ここでNPMとNode.jsの初心者であり、グローバルとローカルのdepインストールと、それらがpackage.jsonにどのように表示されるかを理解しようとしています。

分類Dev

Node.jsでのイベントループ、マルチスレッド、readFile()の実行順序について疑問がありますか?

Related 関連記事

  1. 1

    Node.jsの「keypress」イベントのドキュメントはどこにありますか

  2. 2

    node.jsインタープリターはどこにありますか

  3. 3

    node.jsイベントキューを検査するにはどうすればよいですか?

  4. 4

    Node.jsイベントはどうなりますか?

  5. 5

    Node.jsネイティブアドオン:node_api.hはどこにありますか?

  6. 6

    Bluemix + Node.js-watson-developer-cloudモジュールのドキュメントはありますか?

  7. 7

    Node.jsでイベントを「食べる」方法はありますか?

  8. 8

    一般的なNode.jsモジュールのリリースノート/変更ログはどこにありますか

  9. 9

    node.jsはどこにインストールされましたか?

  10. 10

    Node.jsドライバーからMongoにデータベースが存在するかどうかを確認する方法はありますか?

  11. 11

    Node Js と Express: コードを学び、読むための無料のシンプルなプロジェクトはどこにありますか?

  12. 12

    Node.jsイベントシステムはAkkaのアクターパターンとどのように異なりますか?

  13. 13

    電子フレームワークのローカルnode.jsはどこにありますか?

  14. 14

    ES6変数のインポート名はnode.jsにありますか?

  15. 15

    Node.jsでまだ受信されていないメッセージはどこにありますか?

  16. 16

    新しいイベントがキューに入れられていない場合、node.jsアプリケーションはどのように実行され続けますか?

  17. 17

    データベースの移行は Node.js プロジェクトのどこに置かれますか?

  18. 18

    固定費のNode.jsホスティングはどこにありますか?

  19. 19

    node.jsでmongooseを使用してmongodbベースからドキュメントを取得するにはどうすればよいですか?

  20. 20

    Node.jsイベントループが私には意味がありません

  21. 21

    Node.js MongoDBエラー:更新操作ドキュメントにはアトミック演算子が含まれている必要があります

  22. 22

    websoketを使用してNode.jsイベントループをオーバーロードする方法はありますか

  23. 23

    node_redisコマンドの完全なリストはどこにありますか?

  24. 24

    どのようにオンラインラジオのライブストリーミング音楽があり、Node.jsで音楽を構築するために利用できるリソースはありますか?

  25. 25

    .jsファイルからnode.jsの依存関係を自動的にインストールする方法はありますか?

  26. 26

    Node.jsにWCFバイナリデータをフルテキストXML表現に変換する方法はありますか?

  27. 27

    Node.JSを起動する前に一部のbashスクリプトが必要とする「プログラム」モジュールはどこにありますか?

  28. 28

    ここでNPMとNode.jsの初心者であり、グローバルとローカルのdepインストールと、それらがpackage.jsonにどのように表示されるかを理解しようとしています。

  29. 29

    Node.jsでのイベントループ、マルチスレッド、readFile()の実行順序について疑問がありますか?

ホットタグ

アーカイブ