問題タブ [eventemitter]
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を学んでおり、見つけることができる例のほとんどは単純な例を扱っています。私は、現実世界の複雑なシステムを構築し、node.js のイベント ベース モデルが実際のアプリケーションのすべてのユース ケースをどれだけうまく処理できるかを見積もることに関心があります。
私が適用したい一般的なパターンの 1 つは、特定のタイムアウト時間内に実行が発生しない場合、実行をブロックしてタイムアウトにすることです。たとえば、データベース クエリの実行に 30 秒以上かかる場合、特定のアプリケーションでは長すぎる可能性があります。または、ファイルの読み取りに 10 秒以上かかる場合。
私にとって、タイムアウトのある理想的なプログラム フローは、例外のあるプログラム フローに似ています。イベントが特定の事前定義されたタイムアウト制限内に発生しない場合、イベント リスナーはイベント ループからクリアされ、代わりにタイムアウト イベントが生成されます。このタイムアウト イベントには、代替リスナーがあります。イベントが正常に処理されると、タイムアウト リスナーとイベント リスナーの両方がイベント ループからクリアされます。
タイムアウトを処理し、タイムアウトしたプロセスをクリーンアップするための一般的なメカニズムはありますか? ソケットなどの一部のタイプにはタイムアウト パラメータがあることは知っていますが、すべてのイベントに適用される一般的なメカニズムではありません。
node.js - カスタム EventEmitter の node.js で一時停止/再開を適切に実装する方法
あるプロセスがクエリを送信し、トークンを取得し、トークンを別のプロセスに渡し、そこからレポート サービスにクエリを実行し、結果をストリーミングするレポート サービスを構築しています。
このコードを考えると、一時停止が false になるまでブロッキング呼び出しを実装するにはどうすればよいですか?
これは、私が達成しようとしていることを説明する相互作用図です。
- Web ブラウザーがフロントエンド Web サーバーにレポートを要求します。
- フロントエンド Web サーバーは、特定のクエリに関連するトークンをレポート サービスに要求します。
- 同時に、レポート サービスが PostgreSQL に接続し、クエリを送信します。
- フロントエンド Web サーバーは、レポート サービスの URL とトークンを Web ブラウザーに返します。
- Web ブラウザーは、返されたトークンを使用してレポート サービスに対して Ajax (ロング ポーリング) 要求を実行します。
- レポーティング サービスは、行が Web ブラウザーに戻ってきたときに行をストリーミングします。
すべてが非同期であるため、Web ブラウザーが接続する前にステップ 3 でデータが返される可能性があり、これはデータの損失を意味します。クライアントが戻ってくるまでデータをメモリにバッファリングすることもできますが、RAM の使用が妨げられるため、データ行の発行をブロックしたいと思います。それとも、冗談で、基礎となるライブラリでRAMが引き続き使用されるのでしょうか? とにかく、ポインターは大歓迎です!
javascript - Node.jsでノンブロッキングコードを書くにはどうすればよいですか?
Node.jsでノンブロッキングI/Oを非常に簡単に書くことができます。これは、ライブラリ全体が設定されているものです。
しかし、行われる計算はすべてブロッキングです。イベントエミッタを通過するメッセージはすべてブロックされています。
たとえば、発行イベントはすぐに解決されるため、次のようにブロックされます。
呼び出しをラップする以外nextTick
に、コードを非ブロッキングにするにはどうすればよいですか?
できるだけ多くのクライアントに同時にサービスを提供できるように、イベントループのサイクルごとの計算をできるだけ少なくしたいと思います。
ノンブロッキング方式でコードを書くにはどうすればよいですか?
また、非ブロッキングコードがある場合、それを複数のプロセスにスケーリングするにはどうすればよいですか?
1つのオプションは、WebWorkerサブプロセスAPIが終了するのを待っています。
file-io - node.jsの書き込みストリームへの複数の書き込み
node-dirtyのコードを調べていて、ファイルに大量のデータを書き込むときに、元のプログラマーが書き込みを複数のグループにまとめて、グループの書き込みを一度に1つずつ発行することを選択したことに気付きましたが、コールバックを待たずに、すべてが1つのループの一部として同時に発行されます。これについて3つの質問があります。解決すべき同様の問題があります。
- これは何らかの方法でより効率的ですか?書き込みもバンドルする必要がありますか?
- 最適なバンドルサイズをどのように選択すればよいですか?なぜ1つのグループを書いてみませんか?
- 書き込みストリームでon('drain')イベントにサインアップした場合、同時に発行されたすべての書き込みが完了した後に1回だけ発行されますか?またはそれぞれの後に?(私の推測は前者です)
- on('error')が発行された場合、('drain')イベントも発行されますか?それとも、それらは相互に排他的ですか?
ありがとう
javascript - node.jsイベントを削除します。リスナーもなくなりますか?
node.jsイベントを削除すると、リスナーが消えてしまいますか?他に何も削除する必要はありませんか?
javascript - node.js eventemitter は複数のオブジェクトを作成するか、引数に依存しますか?
node.js のイベントエミッターについて質問する
さまざまなイベントについて、ベース オブジェクトに新しいエミッタを作成する必要があります。
または引数に依存してトリガーする
何が推奨されますか?
ありがとう。
javascript - Node.js - モジュールからイベントを発行するための最良の方法
で遊んでいますEventEmitter
が、モジュールからどのように実装する必要があるかについて混乱しています。私はいくつかの異なる方法を見てきましたが、それらはすべて機能しているようです。ここに私が見たいくつかがあります:
ここから:
しかし、「Mastering Node」では、次のようにします。
(なぜ .call が必要なのですか?)
そして、自分のコードでさらに別の方法を試しました:
それらはすべて EventEmitter から独自の方法で継承しているだけなので、最も単純なソリューションが最適ではないでしょうか?
javascript - 各オブジェクトをクラスとして持つNodeJSゲームでは、イベントをどのように処理する必要がありますか?
Javascript / NodeJSゲームで複数のクラスを処理する場合、どのクラスがイベントを発行し、どのクラスがリッスンする必要があるかを判断するのに問題があります。私はイベント駆動型ゲームを作成するためにこのガイドに従っています:http://pragprog.com/magazines/2011-08/decouple-your-apps-with-eventdriven-coffeescript
私は小さなゲームを書いていて、クラスを次のコントローラーに分割しました。
world-ゲームの世界を作成し、いくつかの「ターン」を経て、いくつかの単純なゲームロジックを決定します(つまり、キャラクターが移動し、タワーが撃つ必要があります)。
タワー-タワーは10x10グリッド上にあり、範囲があります。オブジェクトが範囲内に入ると、それは撃つことができます。
モブ(敵)-10x10グリッドにモブが出現し、3秒ごとに移動します。ある時点で、それは塔の範囲内をさまよう。
私は一日中EventEmittersについて読んでいますが、私のイベントを設計する正しい方法を理解できないようです。モブは移動するときにイベントを発生させ、タワーは「移動」イベントをリッスンする必要がありますか?それとも、世界がすべてのイベントを制御し、タワー/モブが世界に耳を傾ける必要がありますか?
コード例については、以下を参照してください。
背景:私はNodeJS用のシンプルなTowerDゲームに取り組んでおり、最初にサーバーを実装することにしました。すべてのエンティティをMongoDBに保存し、地理空間計算を使用して、オブジェクトが撮影範囲内にあるかどうかを判断しています。現在、基本的な3秒のループを使用して、ゲームと進行状況のロジックを「チェック」していますが、真にイベント駆動型のモデルに移行したいと考えており、苦労しています。
世界:
(完全なworld.coffeeを参照してください:https ://github.com/bdickason/node-towerd/blob/master/controllers/world.coffee )
タワー:
(完全なtowers.coffeeを参照してください:https ://github.com/bdickason/node-towerd/blob/master/controllers/towers.coffee )
モブ:
(mobs.coffeeの完全なソースを参照してください:https ://github.com/bdickason/node-towerd/blob/master/controllers/mobs.coffee )
プロジェクトの完全なソース:https ://github.com/bdickason/node-towerd
イベントのお手伝いをいただければ幸いです。私はgithubに約15のnodejsゲームを注ぎましたが、このパターンを使用している人はまだ見つかりません:(
node.js - NodejsコールバックまたはeventEmitter
これは、nodejsコードを作成するためのベストプラクティスです。
私の現在のコードには非常に多くのコールバックがあり、読みやすさが低下しています。
なにか提案を?
javascript - Nodejs EventEmitter - リスナー関数のスコープを定義する
この作品のようなものが欲しいです:
しかし残念ながら、リスナーは呼び出されません。EventEmitter でこれを行う方法はありますか? リスナーにはできますが、これを行うための特別な(または明白な)方法があるFunction.bind
ことを本当に望んでいます...EventEmitter
助けてくれてありがとう!