問題タブ [event-driven]
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.
php - PHP:イベント駆動型プログラミングとシグナル対応インターフェース(シグナルおよびスロット/オブザーバーパターン)を混同していますか?
Symfony2、ZendFramework2などはイベント駆動型であると多くの人が言っています。
デスクトップの世界では、イベント駆動型プログラミングによって、アプリケーションが状態が変化するたびにオブザーバーに通知することを理解しています。
PHPアプリケーションはステートレスであるため、そのようなことを行う方法はありません。IEユーザーがインターフェイスを使用している間、オブザーバーをビューに関連付けて変更を監視します。代わりに、ビューを更新するために新しいリクエストプロセスが必要です。つまり、これはイベントではなく、まったく新しいリクエストです。
一方、同様の概念があります。イベント駆動型アーキテクチャです。
ここで両方を読むことができます:
http://en.wikipedia.org/wiki/Event-driven_programming
http://en.wikipedia.org/wiki/Event-driven_architecture
そしてここにもう1つ:
http://en.wikipedia.org/wiki/Signal_programming
シグナルは、イベントが発生したことをプロセスに通知するものです。信号は、ソフトウェア割り込みとして説明されることがあります。信号は、プログラムの通常の実行フローを中断するという点で、ハードウェア割り込みに類似しています。ほとんどの場合、信号がいつ到着するかを正確に予測することはできません。
- Stackoverflow[singals]タグの説明
さらに、私が以前イベントドリブンと呼んでいたものは、Qt(オブザーバーパターンの実装)によって導入されたシグナルとスロットパターンに関連しているようです。
例として、イベント駆動型であると主張するPradoフレームワークがあります。
http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Applications(アプリケーションライフサイクルセクション)
http://www.pradosoft.com/docs/manual/System/TApplication.html#methodonEndRequest
IIRC、これはイベント駆動型アプリケーションではなく、代わりにを実装するクラスによって使用されるプラグインフック(信号とスロット)observable Interface
です。つまり、デスクトップアプリケーションがイベントを使用する方法と、ステートレスアプリケーションがイベントを使用する方法(プラグインとして)を考慮すると、ビューを含むアプリケーション全体で最初にイベントが使用され、最後はサーバー側の操作でのみ使用されます。
1つはアスペクト指向プログラミング(信号とスロットを使用)に関連しており、もう1つは横断的関心事/AOPに特に関係していません。言い換えれば、それはアプリケーションの状態により関連しています。
では、これらの用語の実際の関係と、それらの用語の違いは何でしょうか。
- イベント駆動型プログラミング
- イベント駆動型アーキテクチャ
- 信号とスロットのパターン
これらの用語は単なる一般的なパターンですか?したがって、オブザーバーパターンを実装するものはすべて、イベント駆動型と見なすことができますか?
アップデート
Zend Framework 2
上記でリンクしたAOPに関する記事(http://mwop.net/blog/251-Aspects,-Filters,-and-Signals,-Oh,-My!.html)は、Matthew Weier O'Phinney( ZFリーダー)。IIRC、「イベント駆動型」については言及されておらず、信号とスロットのみが言及されています。
Symfony 2
Symfony2
EventDispatcher
コンポーネントの説明には、「イベント駆動型」アプリケーション向けについての言及はありません。http: //symfony.com/doc/current/components/event_dispatcher/introduction.html 「イベント」への参照のみが含まれています(実際、 、SignalとSlotsによって処理されます)。
どちらのフレームワークも、リクエストプロセス中に同期イベントを処理するために、シグナルとスロット内でインターセプトフィルターパターンを使用しているようです。
javascript - Node.jsを使用してゲームサーバーの双方向永続性を作成するには?
宇宙船ゲームを構築しているとしましょう。いくつかのオブジェクト タイプは、宇宙船と太陽系です。Node をバックエンドとして使用したいと考えています。
私が抱えている問題は、これらのオブジェクトの両方を存在させ、コールバック/イベント駆動型システムを使用してリアルタイムで相互作用させる方法です。たとえば、船の作成時に初期化される「場所」属性を数秒ごとに絶えず更新することなく、船がそのシステム内の場所をシステムに継続的に伝えるにはどうすればよいでしょうか。
あるいは、2 隻の船が互いにどのように相互作用するのでしょうか? 場所、種類などをすべて考慮する必要があります。非常に複雑なイベントリスナーを実装する必要がありますか?
必要以上に難しくしているのかもしれません。
extjs - ExtJSでのイベント駆動型プログラミング
私は、さまざまなプラグインのさまざまなウィジェットがホストに読み込まれるアプリケーションに取り組んでいますが、それらはお互いを認識していません。したがって、EDPを使用して、あるウィジェットでイベント(たとえば、UserDeleted)を発生させ、別のウィジェットでそのイベント(有名なパブリッシャー/サブスクライバー、またはより具体的なオブザーバーパターンを取得しましょう)をサブスクライブしたいと思います。
jQueryでは、trigger()メソッドとbind()メソッドを使用してこれを実現します。ただし、ExtJSで同等のものを見つけることができません。私は何かが足りないのですか?または、Ext JSで緩く結合されたUIウィジェットを作成する他のパターンはありますか?
multithreading - イベント駆動型のノンブロッキング IO がベンチマークで優れているほど、スレッドのコストが高いのはなぜですか
私は最近、ノンブロッキング IO と驚異的な速度で知られる V8 上の JavaScript ライブラリである node.js について学び始めました。
私の理解では、ノードは IO が応答するのを待ちませんが、未完了の操作をチェックし続け、IO が応答するとすぐにそれらを続行/完了するイベント ループ (ゲーム ループに似ています) を実行します。ノードのパフォーマンスは Apache HTTPD と比較され、ノードはより少ないメモリを使用しながら大幅に高速化されました。
Apache について読んだ場合、ユーザーごとに 1 つのスレッドを使用していることがわかります。これにより、大幅に速度が低下すると思われます。ここで私の質問が表示されます。
スレッドを、ノードがイベント ループで内部的に行うことと比較すると、類似点が見え始めます。どちらも、リソースの応答を待機する未完了のプロセスの抽象化であり、操作が定期的に進行したかどうかをチェックし、その後、リソースを占有しないようにします。 CPU を一定時間 (少なくとも、良いブロッキング API は再チェックする前に数ミリ秒間スリープすると思います)。
では、スレッドをこれほどまでに悪化させている印象的で重大な違いはどこにあるのでしょうか?
java - 基本的なデザインパターンを使用して、Javaでイベント駆動型プログラミングモデルをシミュレートします
イベント駆動型プログラミングモデルについて。通常、雇用主は「外部ライブラリなしでJavaでイベント駆動型プログラミングモデルをシミュレートする」という質問を提起します。簡単な質問で、デザインパターンを使って答えられると思います。
私のソリューションは、パブリッシュサブスクライブ(別名オブザーバー)チャネルとして2つのキューを配置することです。公開チャネルは、クリックなどの特定のイベントタイプを対象としたイベントを登録します。
ポーリング要素->ボタン1クリック|| ボタン1もう一度クリック|| ボタン1特定の時間をクリックします。<-パブリッシャーキュー
別のサブスクライブチャネルは、新しい公開が発生した場合にイベントリスナーを保存します。
ポーリング要素->リスナー1|| リスナー2|| -<サブスクライバキュー。
最初に公開キューにプッシュし、別の時間にポーリングして、サブスクライバーが消費できるようにします。サブスクライブはパブリッシャー要素を消費し、サブスクライバーチャネルの各要素(この場合は各イベントリスナー)に適用されます。オブザーバーデザインパターンにより、コンポーネントに依存しません。出版社は加入者について何も知りません。
このシナリオは、電子メールニュースレターの購読に似ています。
OO実装では、PublishersオブジェクトとSubscribersクラスがあります。実際には、詳細なパブリッシャーの実装と詳細なサブスクライバーの実装のキューです。また、パブリッシャークラスとサブスクライバークラスを調整するために、メディエーターデザインパターンが組み込まれています。
私のソリューションに欠陥はありますか?
perl - ポートを再利用するソケットで AnyEvent::Handler を使用する方法
最近、ユーザーが非同期/イベント駆動型プログラミングを行えるようにする優れた perl モジュール「AnyEvent」に出くわしました。
正常に動作する次のスニペットを作成しました。私が抱えている問題は、多くのソケットを開いたり閉じたりした後、すべてのクライアントポートをすぐに使い果たしてしまうことです (「netstat -ant」は、20,000 以上のソケットが TIME_WAIT 状態であることを示しています)。
IO::Socket::INET で TCP ソケットを作成し、AnyEvent::Handle で新しく作成したソケットを使用することは可能でしょうか?
試してみましたが、うまくいきません。提案/コメントをお待ちしております。
それを調べて提案してくれた池上に感謝します。ただし、SO_REUSEADDR が有効になっていないようです。これが私が使用したコードです(彼の提案に基づく)
私のシステムはUbuntu 11.04です。ディレクトリ /proc/sys/net/ipv4 には、次の 2 つのファイルの内容があります。
% 以上の tcp_tw_recycle
1
% 以上の tcp_tw_reuse
1
php - PHPのリンクにはcaseステートメントを使用する必要がありますか?
私は、PHPでオンライン請求システムを作成することを含む学校のプロジェクトを与えられました。私の先生は、メニュー(「表示」などの固定ページを使用)を使用する唯一の方法は、ユースケースステートメントを使用することであると確信しているようです。私の最初の推測は、いくつかのhrefをエコーする関数を使用することでした。
彼はまた、PHPはイベント駆動型であると言い続けています。これは本当ですか?私はいつも、サーバー上のインタープリターがコードを調べてから、HTMLをブラウザーに送信すると考えられていました。
何か案は?
java - シンプルなイベント ドリブン アーキテクチャの作成
現在、プロジェクトで少し問題が発生しています。ゲームを実装していますが、イベント駆動型にしたいと考えています。
これまでのところ、生成されるイベントのタイプ (PlayerMove、Contact、Attack など) に応じてオーバーロードされたメソッドを持つ EventHandler クラスがあります。
ゲーム ドライバーまたはクラスのいずれかでイベントを生成します。私の質問は、イベント生成クラスをイベント ハンドラーに密結合させたり、EDA を冗長に使用したりすることなく、イベントを効率的に処理するにはどうすればよいかということです。
組み込みの Java ハンドラーを使用せずに、独自の単純なハンドラーを設計したい
asynchronous - 「1 つの」IOLoop で 10k 接続を処理するにはどうすればよいですか?
このばかげた質問で申し訳ありませんが、本当に混乱しています。間違っているところを訂正していただければ幸いです。
スレッドベースのサーバー (Apache など) では、クライアントごとに新しい「ワーカー」が作成され、すべてのニーズに対応できることを理解しています。
イベント駆動型(Nginx や Tornado など) では、特にPythonの GIL のようなNot Thread Safeがある場合に混乱します。私が理解していることから、すべてのクライアント要求を処理する 1 つの単一ループがあるため、私の馬鹿げた理解として、10,000 の同時接続がある場合、それらの 10 千の要求すべてを処理する方法がわかりません!
php - PHPシステムでメニューリンクをどのように生成する必要がありますか?
私のコンピューティング コースの一部では、PHP システム全体を構築する必要があります。私は、クライアントが Web システムを介して資産 (株式と債券) を表示できるようにする架空の証券会社のために作成することにしました。
メニューについては、「View Shares; View Bonds; My Account」などのページ リンクを表示するようにメニューが修正されるため、いくつかの単純な「href」を使用することを最初に考えました。しかし、私の先生は、「hrefs」を使用してはならないと主張しており、これを機能させる唯一の可能な方法は、switch ステートメント (または彼が呼ぶように、case ステートメント) を使用することです。これは本当ですか?私の先生は事実上 PHP の経験がなく、私たちは彼の言うことすべてに衝突しているように見えることに注意する必要があります (彼は PHP がイベント駆動型であり、システム ループを含むなどについて話していました。私はいつもこれは真実ではないと思っていました... )。
それで、誰か提案はありますか?彼の意向に反して「hrefs」に固執するか、別の方法を使用する必要がありますか?