問題タブ [eventmachine]
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.
ruby - EventMachineベースのアプリでファイルを読み取るための最良の方法は何ですか?
リアクタをブロックしないために、ファイルを非同期で読み取りたいのですが、EventMachineを使用してそれを行う明確な方法が見つかりませんでした。私はいくつかの異なるアプローチを試しましたが、どれも正しいとは感じていません。
- ファイルを読むだけで、リアクターがブロックされますが、それはそれほど遅くはありません(大きなファイルでない限り、間違いなくそうです)。
- 読み取るためにファイルを開き、各ティックでチャンクを読み取ります(ただし、読み取る量が多すぎると、リアクターがブロックされ、少なすぎると、読み取りが必要以上に遅くなります)。
EM.popen('cat some/file', FileReader)
本当に奇妙に感じますが、上記の選択肢よりもうまく機能します。それと組み合わせて、LineAndTextProtocol
それはかなり速く行を読みます。EM.attach
、しかし、私はそれを使用する方法の例を見つけていません、そして私がメーリングリストで見つけた唯一のことはそれが廃止されて…</li>を支持しているということですEM.watch
、ファイルの読み取りに使用する方法の例は見つかりませんでした。
EventMachineリアクターループ内のファイルをどのように読み取りますか?
twisted - Ruby EventMachine、Python Twisted、または JavaScript Node.js のポイント/目的は何ですか?
これらのフレームワークが解決する問題がわかりません。それらは、Apache HTTPD、Tomcat、Mongrel などの HTTP サーバーの代替品ですか? それとももっとですか?なぜそれらを使用する必要があるのでしょうか...実世界の例をいくつか教えてください。チャット ルームやブロードキャスト サービスの例を数え切れないほど見てきましたが、これが、たとえば Java プログラムを設定してソケットを開き、リクエストごとにスレッドをディスパッチする場合とどう違うのかわかりません。
ノンブロッキング I/O については理解できたと思いますが、それがマルチスレッド Web サーバーとどのように違うのかわかりません。Node.jsの場合、スレッドは1つしかなく、複数のスレッドをジャグリングするよりも効率的かもしれないと読みましたが、これらのフレームワークと従来のWebサーバーの唯一の違いは何ですか?
ruby - Sinatra が EventMachine WebSockets と連携して成功しましたか?
私はしばらくの間 Sinatra を使用してきましたが、websockets を介してデータをプッシュすることにより、Web アプリにリアルタイム機能を追加したいと考えています。
gem 'em-websocket' を単独で使用することに成功しましたが、sinatra Web サーバーと Web ソケット サーバーを含む 1 つの ruby ファイルを作成できませんでした。
ラン回してみた!またはスタート!メソッドは別々のスレッドでオフになり、成功しませんでした。
誰かがこれを機能させましたか?
2 つのサーバー間で変数を共有できるように、それらを同じファイルに入れたいと考えています。
ありがとう!
ruby - EventMachineの延期がRubyスレッドより遅いのはなぜですか?
Mechanizeを使用してGoogleのインデックスページを取得するスクリプトが2つあります。EventMachineはRubyスレッドよりも高速になると思いましたが、そうではありません。
EventMachineコードのコスト: "0.24s user 0.08s system 2% cpu 12.682 total"
Rubyスレッドコードのコスト: "0.22s user 0.08s system 5% cpu 5.167 total "
EventMachineを間違った方法で使用していますか?
EventMachine:
Rubyスレッド:
asynchronous - Rails 3beta4/ruby 1.9.2-rc2/thin/eventmachine で非同期 http リクエストを動作させる
アプリで基本的な非同期 HTTP 呼び出しを機能させようとしています。
Rails 3 async stack demo: http://github.com/igrigorik/async-railsからアプリでいくつかのコードを使用しようとしましたが、「ルート ファイバーから生成できません」というメッセージが表示され、何もありません。ここからどこへ行くかを考えます。ここに私のトレースのトップがあります:
私のインデックスコントローラーメソッドは単純です:
1.9.2-rc2、Rails 3 Beta 4 を持っています。また、同じ rvm と gemset を使用して async-rails アプリ自体を正常に実行することもできました。eventmachine リアクターは間違いなく私のアプリで実行されています。これを適切に機能させる方法についてのヒントが欲しいです!
ruby - EM::Iteratorの実例
EM :: Iteratorの実用的な例はありますか?私が見つけることができる唯一の例は、次のコピーであるようです(またはポイントバックします)。
http://yardoc.org/docs/eventmachine-eventmachine/EventMachine/Iterator
EventMachineのRdocにEM::Iteratorのインスタンスが表示されないため、削除された古いクラスかどうかはわかりません。EM :: Iteratorを使用しようとすると、通常、次のエラーが発生します。
NameError:初期化されていない定数EventMachine :: Iterator
ありがとう!
ruby - メソッドを別プロセスで実行するための Ruby ソリューションが必要
インターフェイスが次のようなポーラー サービスを実装しています。
このstart
メソッドは、継続的に http リクエストのヒットを開始し、データベース内のものを更新することになっています。ed が実行されるstart
と、明示的に ed が実行されるまでプロセスが続行されstop
ます。
start
の実装は、新しいプロセスで生成して実行する必要があることを理解しています。Rubyでそれを達成する方法がよくわかりません。Ruby フレームワーク固有のソリューションではなく、Ruby ソリューションが必要です (Rails プラグインや Sinatra 拡張機能ではなく、Ruby gem のみ)。私は eventmachine と starling-workling を調査しています。eventmachine は大きすぎて短期間で理解できないことがわかりました。動作はプラグインであり、gem ではありません。そのため、Ruby アプリケーションで動作させるのは大変です。
これを達成する方法についてのガイダンスが必要です。ポインタはありますか?コード サンプルが役立ちます。
編集
スレッディング/フォークよりも Eventmachine または starling-workling ソリューションが優先されます。
ruby - リアルタイム/並列 HTTP クローラーに適したライブラリ/プラットフォーム?
クライアントからのこの情報の要求に応じて、リアルタイムで多数の Web サイトから情報を並行してフェッチするクローラーを構築しています。10 ~ 20 の Web サイトから特定のページをリクエストし、それらのコンテンツを解析して特定の情報の断片を見つけ、この情報をできるだけ早くクライアントに返す必要があります。非同期で実行したいので、クライアントは準備が整うとすぐに最初の結果を表示しますが、他のリクエストはまだ保留中です。
私は Ruby のバックグラウンドを持っているので、Ruby でソリューションを構築することを好みます。ただし、並列処理と速度は、まさに Ruby が得意としていないことが知られていることです。EventMachineやTyphoeusなどのライブラリで解決できると思いますが、 node.jsも強く検討しています。なぜなら、私は javascript をよく知っており、この種のことのために構築されているように見えるからです。
何を選択しても、結果をクライアントに伝える効率的な方法も必要です。プレーンな AJAX (ただし、サーバーのポーリングが必要)、Web ソケット (ただし、古いブラウザーの場合はフォールバックが必要)、およびCramp、Juggernaut、Pusherなどの永続的なクライアント/サーバー通信のための特定のソリューションを検討しています。
共有したい経験や推奨事項はありますか?
ruby-on-rails - EventMachineとRailsはどのように統合されますか?
EventMachineとは何か、無限の「Hello World!」を設定する方法を示す記事をたくさん見つけました。例ですが、これが私のRailsアプリケーションとどのように統合されるかについてはまだ迷っています。
例として、データベース内の同じ行を同時に編集している可能性のある多数の同時ユーザーがいる既存のRailsアプリがあります。2人(またはそれ以上)の異なるユーザーがレコードをロードできるようにすることを考えていましたが、レコードが更新された場合はそれらのユーザーに通知し、データベースに保存する前に、後者のユーザーに競合する変更を調整するように強制します。クライアント側のJavascriptとブラウザと通信するためのWebSocket(またはFlashSocket)を使用して通知と調整を処理できると考えていました(別のユーザーがレコードを更新した場合-プッシュ通知など)。
最後の部分でEventMachineにたどり着きましたが、リードオフの質問が示すように、これをRailsアプリに統合する方法について途方に暮れています。
誰かが私にこれについての洞察を与えることができますか(たとえば、良いマクロレベルの視点)、またはいくつかの良いリソースに私を向けることができますか?(私はすでにそこにいたので、EventMachineのwikiは別として)。
ruby - エラーにより EventMachine プロセスが中止される
EventMachine を使用して WebSocket でサーバーに接続するバックグラウンド スクリプトの作成に取り組んでいます。スクリプトは、DelayedJob または Resque を使用して実行されます。WebSockets サーバーと通信してメッセージを送信することはできましたが、EventMachine ループ内でエラーが発生するたびに、スクリプトがクラッシュすることはありません。 . WebSocketメッセージを送信するだけで受信しないため、EventMachineを使用する必要はありません-しかし、これについて何か助けていただければ幸いです:)ありがとう!