問題タブ [celluloid]

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.

0 投票する
1 に答える
1232 参照

ruby - EOT、SOH、STX などの文字を含むソケットでの読み取り

セルロイドIOを使用してソケットから読み取ります。着信メッセージの構文は次のとおりです

いくつかのテキストいくつかのテキストいくつかのテキスト

どこ

私の読み取りコードは次のようなものです-

EOT までソケットから読み取る信頼できる方法を探しています。メッセージが読まれたら、関連するセクションを正規表現します。

ソケット読み取りストリームと正規表現で上記の 16 進文字を検出するためのガイダンスは非常に役立ちます。ガイダンス?

0 投票する
1 に答える
2514 参照

ruby - ルビーとセルロイド

いくつかの制限があるため、現在のプロジェクトをEventMachine / EM-SynchronyからCelluloidに切り替えたいのですが、連絡を取るのに問題があります。私がコーディングしているプロジェクトは、大量のページをできるだけ速くクロールするWebハーベスタです。

セルロイドの基本的な理解のために、ローカルWebサーバー上に10.000のダミーページを生成し、この単純なセルロイドスニペットでそれらをクロールしたいと思います。

私がCelluloidを理解している限り、先物は(EventMachineのコールバックと比較して)実行されたリクエストの応答を取得するための方法ですよね?もう1つは、すべてのアクターが独自のスレッドで実行されるため、リクエストをバッチ処理する必要があるため、10.000スレッドでOSX開発マシンでエラーが発生する可能性があります。

それで、プールを作成することは行く方法ですよね?ただし、上記のコードは9999のURLを繰り返し処理しますが、Webサーバーに送信されるHTTPリクエストは1300のみです。そのため、リクエストを制限し、すべてのURLを反復処理すると問題が発生します。

0 投票する
2 に答える
951 参照

ruby - ルビーセルロイドと資源消費

セルロイドは初めてで、プールと先物についていくつか質問があります。私は単純な Web クローラーを作成しています (下部の例を参照)。私の URLS 配列には数十万の URL があるため、この例は数百個に省略されています。

私が今やりたいことは、最大にグループ化することです。先物を使用して 50 リクエスト/秒、コールバックを取得し、さらに 50 個の URL をクロールするなど。入力データが増加すると、それ以上のリクエストを生成できないため、コード スニペットは終了します (OS の制限、私の場合は OSX)。

非常に多くのスレッドが生成されるのはなぜですか? また、これを回避するにはどうすればよいですか? OSが提供するすべてのリソースを使用する高速クローラーが必要ですが、これを超えることはありません:)したがって、OSXでは2.000スレッドが制限のようです。この値を超えると、コードがクラッシュします。

0 投票する
1 に答える
850 参照

http - セルロイド & 高性能 HTTP リクエスト

既存のクローラーを EventMachine から Celluloid に切り替えようとしています。Celluloid と連絡をとるために、Nginx 経由で提供される Linux ボックスで、1 ファイルあたり 150 kB の静的ファイルを多数生成しました。

一番下のコードはその作業を行うはずですが、コードには理解できない問題があります。スレッド プール サイズが 50 であるため、コードは最大 50 のスレッドを生成する必要がありますが、180 のスレッドを生成します。プール サイズを 100 に増やすと、330 のスレッドが生成されます。何がうまくいかないのですか?

このコードをコピーして貼り付けるだけで、すべてのボックスで機能するはずなので、ヒントは大歓迎です :)

ちなみに、each_slice ループの外側でプールを定義すると、同じ問題が発生します。

0 投票する
0 に答える
996 参照

ruby - ノンブロッキング ruby​​ UNIXSocket

前文: 明らかに、私はあまりにも愚かです。

UNIXSocketX 秒以内にコマンドを送信しないクライアントのタイムアウトを含め、ソケットが閉じられる (STDLIB ソケットが行う) まで、処理中にそれ以上の接続をブロックすることなく、接続しているクライアントから単一のコマンドを受け入れる単純なものを Ruby で公開したいと考えています。またEtc.getpwuid(socket.getpeereid.first).name、または: そのソケットに接続しているユーザーのユーザー名を取得します。

デフォルトではそれ以降のUNIXSocketすべての接続がブロックされているため、EventMachine と Celluloid でそれを実行しようとしました。

EventMachine: 複数の接続は魔法のように機能しますが、クライアントのUID. また、クライアントのタイムアウトを設定することはできますが、これが実際にいつトリガーされるかについて、ドキュメントには何も記載されていません。この経験について特にイライラさせられる: EventMachine(のようなget_peername) の一部のメソッドは、ネイティブ拡張内に隠されているため、Google 対応の API ドキュメントのいずれにも記載されていません。残念ながら、getpeereidC コードでさえ EventMachine に相当するものがないため、最終的にはこれで解決しました。

Celluloid:通常の UNIXSocket を開き、開いているすべての接続をasyncCelluloid リスナーに渡しました。これも接続を受け入れ続けましたが、サーバー プロセスを終了しようとしたとき、Celluloidスレッドをシャットダウンできませんでした( Terminating X actors) 。これを改善した唯一のものは. Celluloid のドキュメントでそう言われたので、エコー サーバーの例も試しましたが、必要な結果と同じ結果が得られました。socket.closeActor.current.terminatelistenasync.listenkill -9celluloid-iokill -9

私は独自のハンドラー スレッド ソリューションを起動することを考えていましたが、それらには自動タイムアウトがなく、誰かがこの一見基本的な問題を既に解決していることを望んでいました。

ここで何かが足りないことを願っています。今のところ、Ruby の Unix ソケットには最も基本的な要素が欠けているというのが私の印象です :/

0 投票する
2 に答える
844 参照

ruby - Rubinius 2.0.0 を使用して Celluloid を gem インストールできません

rvmをに設定しました

バージョンを正しく設定します

しようとすると

エラーが発生します

どうしたの?Celluloid が Rubinius をサポートしているのは、それが推奨されるインタープリターであることを知っています。https://github.com/celluloid/celluloid

更新: このリンクのおかげでわかりましたhttps://gist.github.com/4123305

-X19 フラグを渡す必要がありました

0 投票する
1 に答える
2082 参照

concurrency - シナトラ+ウェブソケット+セルロイド

こんにちは、 Celluloid:IO上で実行され、WebSocketを使用するSinatraアプリの簡単なコード例を配置する方法を知っている人はいますか?

Reel for Celluloidの存在を知っています(「ReelはCelluloid:IO上に構築された高速で非ブロッキングの「イベント」Webサーバーです」 ...そしてすぐにWebSocketをサポートします)が、それでも私は使い続けたいと思いますSinatraは気に入ったので、慣れてきました。多くのコードを書き直したくありません...

あなたが助けることができることを願っています。

0 投票する
1 に答える
656 参照

ruby - セルロイドを使用してマイクロ秒ごとにブロックを呼び出す方法はありますか?

セルロイドのeveryメソッドを使用してマイクロ秒ごとにブロックを実行していますが、小数点を指定しても常にブロックを毎秒呼び出すようです。

これが 0.5 秒ごとに呼び出されることを期待します。ただし、1秒ごとに呼び出されます。

助言がありますか?

0 投票する
1 に答える
861 参照

ruby - Celluloid を使用してスレッドのプールから HTTP リクエストを実行するにはどうすればよいですか?

Ruby 1.9.3 を使用しており、Mac OSX 10.7 でテストしています。

Senderいくつかの URL にリクエストを送信することになっているクラスがあります。

RabbitMQ キューからメッセージを受信し、次を使用してリクエストを送信する別のプロセスがありますSender

実行すると、次のようになります。

プール マネージャーが原因でプロセスをクラッシュさせるために何か間違ったことをしていますか?

0 投票する
1 に答える
537 参照

ruby - Process.spawn ぶら下げ

Celluloidを使用してジョブ処理サーバーを作成しています。私は、Beanstalkd キューからタスクを取得し、一連の作業を行うPHP スクリプトを呼び出すことによってそれを処理するワーカーのプールを持っています。Process.spawn

PHPコマンドを実行する方法は次のとおりです。

これは「ほとんど」の場合に機能します。何百ものジョブでテストを行いましたが、すべて正常に処理されました。しかし、本番環境に置くと、一部のPHP コマンドが無期限にハングします。

ハングしたプロセスを強制終了し、PHP コマンドが書き込むログファイルを見ると、最後のログ メッセージはランダムに見える目立たないイベントの数です (つまり、プロセスがハングするまでのプロセスのパターンを識別できません)。 .

ジョブを処理するための PHP スクリプトは、本番環境で数か月間使用されてきましたが、cron で実行されました。変更された唯一の点は、代わりにこの新しいジョブ プロセッサから実行されていることです。

私はこれに間違った方法でアプローチしていますか? Ruby が何らかの形でプロセスを一時停止/スリープ状態にしているのでしょうか?出力を適切に読み取っていないためにブロックされているのでしょうか?

- - 編集 - -

バックティック演算子を使用してコマンドを実行するように切り替えました (セルロイド アクターは非同期であるため、ブロックは問題になりません)。

これまでのところ、これは問題なく機能しています。バッククォートの使用方法はどのように異なりますか?