問題タブ [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-on-rails - Railsアプリの「内部」にEventMachineをどのように生成しますか?
Railsアプリケーションがあり、それに何らかのWebSocketサポートを追加したいと考えています。さまざまなグーグルから、Rubyベースの最高のWebSocketソリューションはEventMachineで実行されているem-websocketであるように見えます。
EventMachineリアクターをRailsに「統合」する方法があるかどうか疑問に思いました。初期化コードはどこに置きますか?これはこれを達成するための適切な方法ですか?
SinatraにフォールバックしてEventMachineリクエストを実行するこの例を見GET
たことがありますが、それは私が探しているものではありません。
どんな助けでも大歓迎です。
ruby - TCP クライアントが eventmachine からデータを受信できません
コード、クライアントがあります:
サーバー:
クライアントは何も印刷できません
ruby - EventMachineの利点は何ですか
これは私のテストケースです。EMは一般的なTCPサーバーよりも高速ではないことがわかりました。
EMサーバー:
と私のベンチマークテスト:
ruby - イベント化されたドライバーを使用した Redis multi/exec
(EventMachine を使用する Ruby ドライバー) のようなイベント化された Redis ドライバーでMULTI
/ EXEC
(および) をどのように使用しますか? 私が実行した場合:WATCH
em-hiredis
EXEC
多くのことが起こっている場合、アプリケーションの他の部分が .実行に 1 秒以上かかると、インクリメント コマンドの一部がMULTI
/の一部として送信されますEXEC
-- トランザクションを中止したい場合はどうすればよいでしょうか? トランザクションの一部になってしまったインクリメントは消えてしまいます。さらに悪いシナリオで)。
MULTI
/の進行中に他のアクションを実行できないように、ある種のロックを実装できると思いますがEXEC
、それは素晴らしい解決策とは思えません。他の誰かがより良い方法を見つけましたか?
ruby - postgresqlgemasyncを使用する
私はGoliath(eventmachineを利用)とpostgres gempg
を使用していますが、現在はpg gemをブロックする方法で使用しています:(conn.exec('SELECT * FROM products')
たとえば)そしてpostgresに接続するためのより良い方法があるかどうか疑問に思っていますデータベース?
ruby-on-rails - モデル内のRails非同期処理
私のrailsアプリには、更新に関連付けられたすべてのURLを追跡する単純なモデルのリンクがあります。
しかし、オブジェクトを作成する前に、リンクの寿命や全体的に短縮サービスが好きではないなどのさまざまな理由で、URL短縮サービスを削除したいと思います。
現在、私のlongenate関数は非常に単純で(まだ開発中なので、:))、リクエスト中にブロックされるため、かなりのボトルネックが発生します。一度にかなりの数の更新が作成される場合は、かなり時間がかかる可能性があります。通常、数十が作成されます。アップデート/リンクなどをユーザーにすばやく表示する必要があるため、これは問題です。
これをブロックしないものと交換したいと思います。私はeventmachineに精通しており、それを使用していくつかの単純なサービスとコンシューマーを作成しましたが、それでもRailsには比較的慣れていません。このようなものに最適なレールアプローチは何でしょうか?一度にすべてのリンクを延長/作成するイベントマシンループを含む「finalize」関数、またはモデル内で(何らかの方法で)実行して、作成されるたびに非同期タスクをスピンオフするようにしますか?
アドバイス/リソースをありがとう
ruby - パラメータ化されたストリーミングAPIを作成する方法はありますか?
http://dev.twitter.com/pages/streaming_api_methods#statuses-filterのようなパラメーター化されたストリーミングAPIを作成したい
私が見る簡単な方法は次のとおりです。
- メッセージ用のredisチャネルを作成します(Twitterのステータスなど)。
- 接続されている各ソケットは、このチャネルでサブスクライブします。
- redisコールバック内で、各ソケットは現在のメッセージが提供されたパラメーターに適合するかどうかをチェックします(パラメーターは個別のソケットメッセージとして設定できます)
みんなどう思う?
heroku - Heroku + Sinatra + Twitter Streaming API で EventMachine ワーカーを実行していますか?
Sinatra を使用して Heroku で eventmachine を実行する際の非同期パターンについて理解しようとしています。簡単に言えば、私が達成しようとしているのはこれです: em-httpを使用して Twitter ストリーミング API への http 要求を作成し、ストリームコールバックで、websockets を使用してツイートを解析し、クライアントにプッシュします。ここまでは順調ですね。問題は、同じアプリケーションが Web ページも提供する必要がある場合に発生します。私のconfig.ruには、他のBundlerのものの中でも、
次に、アプリ ファイルの EM ブロック:
現在、何が起こっているように見えるかというと、EventMachine が Reactor パターンを使用して返されないため、 run TwitterAppに到達することはありません。
代わりに、私がやろうとすると
EM.run ブロック内では、すべてがローカルで正常に実行され、ruby app.rbを使用して実行されますが、ラックアップを使用すると、サーバーが 2 回 (1 回は Thin で、もう 1 回は WEBrick で) 実行されるようで、Heroku では次のようにクラッシュします。
ここで非常に些細なことを見逃していますか?
どうもありがとう!
javascript - EventMachine が Node よりも遅いのはなぜですか?
私の特定のケースでは、少なくとも。ここで一般論を述べようとしているわけではありません。
Node.js で作成したこの Web クローラーがあります。代わりに Ruby を使用したいので、EventMachine で書き直しました。オリジナルは CoffeeScript にあったため、実際には驚くほど簡単でした。コードはほとんど同じですが、EventMachine では実際に例外をトラップして回復することができます (ファイバーを使用しているため)。
問題は、Node.js コードでは 20 秒未満で実行されるテストが、EventMachine では最大で 5 分以上かかることです。接続数を見ると、並行して実行されていないように見えます (何百ものキューに入れられた後、非常にゆっくりと下降します) が、ログはコード ポイントが並行してヒットしていることを示しています。
コードがなければ、何が起こっているのかを正確に知ることはできませんが、何らかの根本的な違いがあるのであきらめるべきなのか、それとも本当に同じくらい速く実行できるべきなのか (a)多少の速度低下は問題ありません)、何が問題なのかを突き止める努力を続ける必要があります。
私は次のことをしましたが、実際には効果がないようでした:
ああ、 EventMachineにブロッキング コールがないことは確かです。すべての行を約 10 回くまなく調べて、ブロックしている可能性のあるものを探しました。私のネットワーク呼び出しはすべて EM::HttpRequest です。