問題タブ [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::ConnectionNotBound の原因は何ですか?
私は EventMachine を初めて使用するので、これが何を意味するのかわかりません。私はこの例外を受けています:
プログラムはかなり複雑なので、それに至るまでのすべてを説明することはできません。私が必要とするのは、何を探すべきかへのポインタです。エラーは文書化されていないようです ( http://eventmachine.rubyforge.org/を参照)。
ruby - rubyのクラスメソッドを使用してオブジェクト間でDB接続を共有しますか?
PostfixSMTPアクセスポリシーの委任として使用するrubyスクリプトを書いています。スクリプトはTokyoTyrantデータベースにアクセスする必要があります。私はEventMachineを使用してネットワーク接続を処理しています。EventMachineには、新しい接続が作成されるたびにEventMachineの処理ループによってインスタンス化されるEventMachine::Connectionクラスが必要です。したがって、接続ごとに、クラスがインスタンス化されて破棄されます。
EventMachine :: Connectionのpost_initから(つまり、接続がセットアップされた直後に)Tokyo Tyrantへの接続を作成し、接続が終了した後に切断します。
私の質問は、これがdbに接続する適切な方法であるかどうかです。つまり、必要なすべての時間に接続を確立し、終了後に切断しますか?(プログラムが開始されたときに)一度DBに接続すると、プログラムのシャットダウン中にDBを切断する方がよいのではないでしょうか。もしそうなら、どのようにコーディングすればよいですか?
私のコードは次のとおりです。
に関して、
ラージ
jruby - JRuby EventMachine ロードするファイルがありません
JRuby に EventMachine をインストールしました (Win32 を使用しています)。サーバーの例を試すと、次の場合にエラーが発生します
エラーは次のとおりです。
server.rb:1:in `require': no such file to load -- server.rb:1 からの eventmachine (LoadError)
しかし、宝石はインストールされています!
ruby - EventMachine を使用した SOAP 呼び出し
EventMachine 内でノンブロッキング SOAP リクエストを作成する方法はありますか?
adwords4r gem を使用して、Google adwords API (SOAP ベース) とやり取りする Ruby アプリケーションを作成しています。アプリケーションは EM を使用して、stomp 接続を介してメッセージを受信し、adwords API への SOAP 呼び出しを行うことによってそれらのメッセージを処理します。処理はリアクター スレッド内で行われるため、明らかに、これらの呼び出しを非ブロックにする必要があります。1 つのオプションは EM.defer を使用することですが、スレッドプール内のスレッドの束のオーバーヘッドは避けたいと思います。
ruby - EventMachine : Rails アプリケーションでチャット システムを構築する方法
EventMachine と ruby on rails を使ってチャットシステムを構築しています。学習目的です。
これは、クライアントがサーバーに接続する方法です。
できます。ただし、問題は、上に示したように、クライアントが常に接続を開いたり閉じたりしているため、現在部屋でチャットしている人のリストを取得できないことです。
別の計画は、接続されたユーザーごとに EventMachine クライアントを実行することです。各ユーザーのセッションにクライアント接続を保存する予定です。このようにして、各ユーザーに同じ質問を使用します。ユーザーがログアウトしたら、接続を閉じます。
ただし、ユーザーが外出した場合、クライアント接続を自分で閉じるにはどうすればよいですか。
何かご意見は。
ruby-on-rails - Rails で大量の非同期 IO バウンド操作を実行する
私は定期的に多数の IO バインド操作を実行する必要がある Rails アプリケーションに取り組んでいます。これらの操作は非同期で実行できます。たとえば、システムは 1 日に 1 回、ユーザーごとに Salesforce.com にクエリを実行して、追跡しているユーザーの現在のアカウント (会社) のリストを取得する必要があります。これにより、膨大な数 (潜在的に > 100k) の小さなクエリが発生します。
私たちの現在のアプローチは、ActiveMessaging で ActiveMQ を使用することです。各ユーザーは、異なるメッセージとしてキューにプッシュされます。次に、コンシューマーはユーザーをキューから引き出し、Salesforce.com にクエリを実行し、結果を処理します。しかし、このアプローチはひどいパフォーマンスをもたらします。1 つのポーラー プロセス内では、一度に 1 人のユーザーしか処理できません。したがって、Salesforce.com クエリはシリアル化されます。文字通り何百ものポーラー プロセスを実行しない限り、ポーラーを実行しているサーバーを飽和状態に近づけることはできません。
代替手段として EventMachine を検討しています。これには、単一の EventMachine プロセス内で多数の Salesforce.com クエリを同時に開始できるという利点があります。そのため、サーバーの優れた並列処理と使用率が得られます。
しかし、EventMachine には 2 つの問題があります。1) ActiveMQ/ActiveMessaging で得られた信頼性の高いメッセージ配信が失われます。2) EventMachine を定期的に再始動して、メモリー増加の影響を軽減することは容易ではありません。たとえば、ActiveMessaging では、1 日に 1 回ポーラーを再起動する cron ジョブがあり、これはメッセージを失うことを心配することなく実行できます。しかし、EventMachine では、プロセスを再開すると、進行中の何百ものメッセージが文字どおり失われる可能性があります。これを回避できる唯一の方法は、EventMachine の上に持続性と信頼性の高い配信レイヤーを構築することです。
誰もがより良いアプローチを持っていますか? 大量の非同期 IO バウンド操作を確実に実行するための最良の方法は何ですか?
sockets - 最小限のダウンタイムでTCPリスニングソケットを引き渡す方法は?
この質問にはEventMachineのタグが付けられていますが、あらゆる言語の一般的なBSDソケットソリューションも高く評価されています。
いくつかの背景:
TCPソケットでリッスンしているアプリケーションがあります。これは、通常のSystemVスタイルのinitスクリプトで開始およびシャットダウンされます。
私の問題は、TCPソケットを処理する準備ができるまでに起動するのに時間がかかることです。それほど長くはなく、おそらく5秒だけですが、就業時間中に再起動を実行する必要がある場合は、5秒長すぎます。また、既存の接続を開いたままにして、正常に終了することも重要です。
アプリケーションを再起動する理由は、パッチやアップグレードなどです。残念ながら、私は時々、この種のことをプロダクションで行う必要があるという立場にいます。
質問:
あるプロセスから別のプロセスにTCPリスニングソケットをきちんと引き渡す方法を探しています。その結果、ダウンタイムはほんの一瞬です。新しいプロセスが新しいconnectinoのサービスを開始する間、既存の接続/ソケットを開いたままにして、古いプロセスでの処理を終了したいと思います。
BSDソケットを使用してこれを行うための実証済みの方法はありますか?(EventMachineソリューションのボーナスポイント。)
これを実装しているオープンソースライブラリは、そのまま使用することも、リファレンスとして使用することもできますか?(繰り返しになりますが、RubyおよびEventMachine以外のソリューションも高く評価されています!)
windows - バッククォートを介した eventmachine および外部スクリプト
外部スクリプト/コマンドを呼び出す必要がある eventmachine を使用して記述した小さな HTTP サーバー スクリプトがあり、バッククォート ( ``
) を介して呼び出します。バックティックされたコードを実行しないリクエストを提供する場合、すべて問題ありませんが、EM コードがバックティックされた外部スクリプトを実行するとすぐに、リクエストの提供を停止し、一般的に実行を停止します。
eventmachine はサブプロセスやスレッドに敏感で、popen
この目的のためのメソッドを持っているように見えますが、EM のソースは、このメソッドは Windows では機能しないと警告しています。このスクリプトを実行しているマシンの多くは Windows を実行しているため、popen
.
私はここで運が悪いのでしょうか?Windows で eventmachine スクリプトから外部コマンドを実行する安全な方法はありますか? EM の実行をブロックせずに、外部で実行するコマンドを起動する方法はありますか?
編集: EMを最も台無しにしているように見える犯人は、次のように、Windowsstart
コマンドの私の使用法ですstart java myclass
。start を使用する理由は、これらの外部スクリプトの実行を開始し、EM リクエストが処理された後も実行を継続するためです。
ruby - 二人ゲーム用のフラッシュ通信オプション
私は現在、フラッシュ通信にSmartfoxserverを使用するフラッシュゲームを組み込むプロジェクトに取り組んでいます。その通信は、ほとんどの場合、2人のプレーヤー間でカーソルとオブジェクトの動きを同期させるだけです。
私はフラッシュの男ではなく、ルビーのプログラマーなので、興味がありました。この種の時間に敏感なデータ交換のために、フラッシュはどのような通信オプションを提供するのでしょうか。外部プログラムへの依存を最小限に抑えるために、ruby-eventmachineベースの通信サーバーを作成することを考えていました。それも実現可能でしょうか?