問題タブ [event-driven-design]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - node.jsランタイム戦略を開発する方法は?
Node.jsのアプローチはイベント駆動型であり、イベントをいつ発生させるかという問題にどのように取り組むのでしょうか。
Webアプリケーションに対して、データの作成、ページの提供、データの受信などのアクションがあるとします。
これらのイベントをどのようにレイアウトしますか?ねじ山システムでは、設計はかなり「単純」です。スレッドを特定のタスクセット専用にし、スレッド同期の道を進みます。これらのタスクがオンデマンドで低い間、スレッドはアイドル状態になり、何もしません。必要なときにコードを実行します。この道路には問題がありますが、十分に文書化されており、ある程度解決されています。
node.jsイベントのやり方に頭を悩ませるのは難しいと思います。10件のリクエストがありますが、データを作成していないため、何も提供できません。データの作成は長いアクションであり、別の5人のクライアントがデータを送信したいと考えています。今何?
私は次のテストされていないコードを作成しました。これは基本的に、登録されて実行されるコールバックの山です。実行して、今実行するコードを決定する、ある種のパイルマネージャーがあります。そのコールバックによって作成されたすべてのコールバックは、「自然に」偶数ループに追加できます。また、イベントループが制御を戻すことができるように、自己を登録する必要があります。静的コンテンツのような他のものや、これまでとは異なる方法でバインドできるもの。
- 現在のイベントループ状態の最後の呼び出しになるようにコールバックを登録するにはどうすればよいですか?
- これはこの問題を解決するための良い方法ですか?
nservicebus - EDA: 「カスケード」イベントまたは明示的なコマンド?
シナリオ
システムの主要なコンポーネントが 3 つあるとします。
UI - ユーザーからの入力を収集し、メッセージ バス経由で送信されるLoginUserCommandを作成します。次に、ユーザー インターフェイスはMessageReceivedEvent(s) のこのメッセージ バスをリッスンします。
ユーザー サービス- LoginUserCommand を受け取り、UserLoggedInEventを発生させます。ここで重要なのは、Message Serviceにメッセージの受信を開始するように指示する必要があるということです。
Message Service -ログインしているユーザーに対してMessageReceivedEventを発生させます。
オプション
私が持っている設計上の質問は、User ServiceとMessage Serviceの間の相互作用に関するものです。
ユーザーがログインすると、さまざまなことが発生する必要があります。UI がメッセージを受信し始めるように、サービスを調整する必要があります。
するべきか...
- ユーザー サービスにUserLoggedInEventを発生させ、メッセージ サービスにこのイベントをリッスンさせ、ユーザーがメッセージを受信するために必要な作業を実行させますか?
...また...
- ユーザー サービスにUserLoggedInEventを発生させますが、コマンド - StartMessageRecomingCommand を作成し、これを明示的にメッセージ サービスに送信しますか?
質問
各アプローチの長所と短所は何ですか? (カスケード イベントと明示的なコマンド)。他のオプションはありますか?
javascript - node.js がイベントを待っているクライアントに戻る
私はnode.jsでCometの概念を少しいじっていますが、まだ少し混乱しており、ここの誰かが私を正しい方向に向けることができるかどうか疑問に思っています.
クライアント コードが手番を要求するゲーム アプリを考えてみましょう (チェス アプリなど)。私がここで考えているのは、次のような使用です。
試合が開始されると、ノード サーバーのメソッドが呼び出され、マッチの ID と最初のプレーヤーを含むマッチ配列に要素が作成されます。
プレーヤーが移動すると、この試合を参照する配列要素の現在のプレーヤーを更新するメソッドが呼び出されます。このメソッドは、変更が発生したときにイベントを発生させる必要があります。
移動を行う前に、クライアント コードは、ユーザーの順番であるかどうかを確認し、順番でない場合はプレイヤーの変更イベントを待機するサーバー上のメソッドを呼び出す必要があります。
これがイベント ループ内での適切なアプローチであるかどうかはわかりません。そうであれば、イベントが戻るまでメソッドを待機させる方法がわかりません。
助言がありますか?
multithreading - イベント駆動型のノンブロッキング IO がベンチマークで優れているほど、スレッドのコストが高いのはなぜですか
私は最近、ノンブロッキング IO と驚異的な速度で知られる V8 上の JavaScript ライブラリである node.js について学び始めました。
私の理解では、ノードは IO が応答するのを待ちませんが、未完了の操作をチェックし続け、IO が応答するとすぐにそれらを続行/完了するイベント ループ (ゲーム ループに似ています) を実行します。ノードのパフォーマンスは Apache HTTPD と比較され、ノードはより少ないメモリを使用しながら大幅に高速化されました。
Apache について読んだ場合、ユーザーごとに 1 つのスレッドを使用していることがわかります。これにより、大幅に速度が低下すると思われます。ここで私の質問が表示されます。
スレッドを、ノードがイベント ループで内部的に行うことと比較すると、類似点が見え始めます。どちらも、リソースの応答を待機する未完了のプロセスの抽象化であり、操作が定期的に進行したかどうかをチェックし、その後、リソースを占有しないようにします。 CPU を一定時間 (少なくとも、良いブロッキング API は再チェックする前に数ミリ秒間スリープすると思います)。
では、スレッドをこれほどまでに悪化させている印象的で重大な違いはどこにあるのでしょうか?
java - Java-イベント処理設計
特定のイベントの処理とデータの生成に基づくシステムを開発しようとしています。各イベントには(おそらく)いくつかの異なるフィールドが含まれ、各リスナーはそれらのいくつかを処理します。私は次の2つのアプローチを念頭に置いています
イベント生成クラス内で、複数のイベントリスナーを登録します。各リスナーは、イベントの特定のフィールドの1つの特定の値をリッスンします。たとえば、次のようになります。
/li>
処理はオブジェクト自体の中で行われ、イベントの集中処理はなく、各オブジェクトが情報を処理できるようにするため、これは魅力的です。不利な点は、おそらく致命的ですが、各イベント(数十万のうち)をすべてのリスナーにブロードキャストする必要があるという事実ですが、実際にはごく一部しかブロードキャストされません。それはおそらく長期的には素晴らしいパフォーマンスヒットを生み出すでしょう...
一元化されたリスナー。すべてのイベントをリッスンして処理し、対応するイベントプロセッサに処理を委任します。次に例を示します。
/li>
これは高速ですが、イベントの他の部分(イベントIDなどをチェックするプロセッサなど)に対して個別のマップまたはプロセッサのコレクションが必要になります。これは、アプローチ1には当てはまりません。これは、単に別のリスナーのセットを生成して登録するためです。イベント生成クラスでそれらを。
あなたたちはこれらのどれについてどう思いますか?それらは理にかなっていますか、それともまったく異なるsthについてアドバイスしますか?
design-patterns - アクターを使用したデザインパターン
俳優ベースのパラダイムはかなりクールです。効果的に拡張できるため、並行システムを評価する必要があるパラダイムになります。私はそれについていくらか読んだことがあり、コアの意図についてまともな考えを持っています。メッセージと複数の「アクター」を使用してコストのかかる操作を実行し、要求/応答の相互作用による待機を最小限に抑えて、システムのスループットを向上させます。しかし、私は人々が俳優と一緒に使用するデザインパターンに十分に触れていませんでした。アクターベースのシステムのデザインパターンを探しています。
アクターデザインパターンの一般的な例は、マスターコーディネーターアクターと多数のチャイルドワーカーアクターが存在するシステムです。彼らは、高価な操作をより小さなチャンクにマスターマップし、より小さなチャンクをメッセージとしてワーカーの束に送信し、それらからの応答を待ってから、それらすべてを結果に還元します。このパターンのいくつかの洗練された例では、ワーカーアクターは、より多くの作業の準備ができていることをマスターに通知し、マスターはオンデマンドでより多くの作業をそれらにルーティングします。これにより、作業の適切なバランスが確保され、ジョブのサイズが大幅に異なる場合に役立ちます。
私はより多くの俳優ベースのパターンに関する文献を探し回っていましたが、上記以外の例はまだ見つかりませんでした。Akka Actorsプロジェクトのサンプルはまだ調べていませんが、ポインターがあれば非常に役立ちます。
listener - ポーリングとイベント ドリブン プログラミングは、同じ手法の別の言葉ですか?
割り込みと周期的ポーリングについて調べ、ポーリングを待つ必要がない割り込みの利点を学びました。ポーリングは、イベント駆動型プログラミングのように、または少なくともリスナーに似ているように思えました。ポーリングが実際に行うことは、入力または出力をリッスンすることに非常に似ています。同意しますか、それともポーリング (周期的なリッスン) とイベント駆動型プログラミング (いわゆるリスナーによるリッスン) の決定的な違いを誤解していましたか?
c++ - 関数ポインター ベクトルからのメンバー関数の関数ポインターの呼び出し
これは主に構文エラーだと思います(コンパイル中にキャプチャされませんが、実行時にのみエラーが発生します)
私は eventReceiver のベクトルを保持し、ベクトルからそれらを呼び出そうとするイベント駆動型アーキテクチャを開発しようとしています。
CommonIO.h
CommonIO.cpp
Main.h
メイン.cpp
incomingMsgReceived 関数は非同期プロセスによって呼び出されます
プログラムは正常にコンパイルされます..しかし、で壊れます:listenersi; ライン。これの適切な構文は何ですか?
c - c でのイベント駆動設計
これは少し理論的な質問です。センサーでいっぱいのデバイスを想像してみてください。ここで、センサー x が何かを検出した場合、何かが起こるはずです。一方、2 つのセンサーが 2 つの異なるものを検出するなど、他の何かが検出された場合、このデバイスは異なる動作をする必要があります。
webdesign (so javascript) から、たとえば (jquery を使用して)$(".x").on("click", function(){})
または angularjs からイベントについて学びまし$scope.watch("name_of_var", function())
た。
複雑なライブラリを使用せずに、C でこの動作を再現する可能性はありますか?
ありがとう。