問題タブ [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 - Ruby パケットのバッファリングと分割
というわけで、ちょっと大雑把ですが、できる限り絞ってみます。サーバー (EventMachine を使用) があり、パケットが分割されることもありますが、バッファリングされることもあります。そこで、それらをバッファリング/アンバッファリングする関数を作成してみました。私は何かを作ることができましたが、それは「期待どおり」に機能していません. 正直なところ、「ほとんど機能していない」とは言えません。
何よりもまず、パケット構造を指摘したいと思います。
- パケットの最初の 4 バイトは、その ID またはパケットの名前です (
name
)。 - 次の 4 バイトは、パケットの「msg」部分の長さです (
len
)。 - また、msg 部分の前の最後の 4 バイトは参照フィールドで、さまざまな用途があります (
ref
)。
注:lenf
は len の生の形式なので、文字列です。それほど重要ではないと思います。
バッファコード
TLDR
Rubyでバッファリングおよびバッファ分割パケット/データ(EventMachineによって渡される)を分割する方法は?
更新:パケットは TCP 経由で送信されます。データは C で作成されたクライアントから取得されるため、バイト ストリームです。
正確に何が問題なのかはわかりませんが、このメソッドはパケットを適切に分割またはバッファリングしていないようです。少量のデータを受信している間は問題なく動作します(バッファリングも分割もされていないと思います)。
パケットがバッファリングされている場合、パケットを正常に分割することさえありますが、バッファリングがまったく機能していないようです
ここで「ロジック」の一部を台無しにしていると確信していますが、それが何であるかはわかりません。どんな助けでも大歓迎です。
ありがとう
ruby - OpenSSLを使用してSynologyDiskStationにEventmachineをインストールできません
Synology DiskStation DS211LinuxベースのNASにEventMachinerubygemをインストールしようとしていますが、ネイティブ拡張用のMakefileを作成しようとすると、インストールが失敗します。
mkmf.logの内容:
RubyとOpenSSLはどちらも、Optwareipkg
を使用してデフォルト/opt
ディレクトリにマシンに正常にインストールされました。
OpenSSLが予期しないディレクトリにインストールされているためにEventMachineが失敗したと思われますが、正しい場所を指定するために必要な構成オプションと値の組み合わせが不明です。
いくつかの環境の詳細:
他の誰かがこの環境にEventMachineをインストールする運がありましたか?
ruby - 神でデーモン化されていないプロセスを終了する適切な方法は何ですか?
神を使用して監視しているクラスがあります。これはその構造です:
lib/my_class.rb
そして、これは私が神と一緒にそれを実行する方法です:
config/my_config.god
終わり
停止を指定しなかったため (方法がわからない)、神は a を送信してから、失敗した場合にプロセスを停止するためにSIGTERM
aを送信します。SIGKILL
これは、デーモン化されていないプロセスを処理する方法ですか?
sinatra - シンWebアプリでEM呼び出しを使用することは可能ですか?
追加の初期化なしでThin内でEventMachine呼び出しを使用することは可能ですか?
現在、Thin(サービスとして実行されている)によって実行されているSinatraアプリがあります。を使おうとするとEventMachine.connect_unix_domain
、eventmachine not initialized
Thin(およびおそらくEventMachine)が実行されていても...が表示されます。
ruby - DRb または EventMachine を使用した QtRuby
ネットワークを介して他のインスタンスと通信する Qt を使用して、Ruby でアプリケーションを作成したいと考えています。
Qt のイベント ループを DRb または EventMachine と統合するにはどうすればよいですか?
編集:
もっと時間があれば答えを見つけたので投稿します
ruby - EventMachine UNIX ソケット接続: Thin running as a service でそれらを使用するにはどうすればよいですか?
EventMachine.connect_unix_domain
Thin as a service (init スクリプト (抜粋) と以下の構成を使用) を実行しているときに使用するにはどうすればよいですか。直下のコードが問題です (eventmachine not initialized: evma_connect_to_unix_server
エラーが発生します)。2 番目のコード例は機能しますが、シンをデーモン化することはできません (私は思いません)。Thin には EventMachine の実行中のインスタンスがまだありませんか?
更新: 奇妙なことに、(でservice thin stop
) サーバーを停止すると、config.ru ファイルに入り、アプリを実行するようです (したがって、stop
コマンドがタイムアウトしてプロセスを強制終了するまで機能します)。この動作を引き起こしている可能性のある薄い停止が発生するとどうなりますか?
問題のあるコード
作業コード
初期化スクリプトの抜粋
シン構成
ruby-on-rails - Rails の Async_Sinatra: 非同期アクションは共有セッションに書き込めません
Rails プロジェクトに Sinatra クラスがあります。eventmachine と async_sinatra を使用して、外部サイトへの非同期呼び出しを行います。セッション オブジェクト (理想的には、Rails が使用しているものと同じもの) に書き込みたいのですが、今のところ次のことしかできません。
- Rails とは別のセッション オブジェクトに書き込みます (デフォルトでは、Sinatra はそのセッションに Rails とは異なる名前を付けます)。
- 同期呼び出しのみの同じセッションへの書き込み
非同期呼び出しを行うと、async_sinatra コードで記述されたセッションがクライアント マシンにプッシュされません。次の 2 つのいずれかが起こっていると思われます。
ヘッダーはすでにクライアントに送信されており、セッションを格納しているローカル変数 (Sinatra 内) はアクションの最後にフラッシュされます。クライアントは、このデータを Cookie に保存するというサーバーからの要求を認識しません。
ヘッダーはクライアントに送信されていますが、Rails はすぐに別のヘッダーを送信し、Rails がその
session
変数に格納したものを Cookie に書き込み、Sinatra が書き込んだものを上書きするようにクライアントに指示します。
いずれにせよ、Sinatra と Rails の両方で単純なセッション機能を取得したいと考えています。私が間違っていることの説明もいいでしょう:)
コードの完全な作業コピーはgithubにありますが、問題は特に次のコードにあると思います。
編集 7/15 :
Async-Rack を含めるように Github のコードを変更しました。Rails と共有されていない場合、async-sinatra はセッションに書き込むことができます。master
とのsegmented_sessions
ブランチを比較して、動作の違いを確認します。(またはmaster
ブランチで、にuse ActionDispatch::Session::CookieStore
変更enable :sessions
)
ruby - Ruby: EventMachine がロードされない
アップデート:
簡単な答えを見つけましたが、それは完全に私自身のせいです。上記のコードを「eventmachine.rb」というファイルに保存しました。したがって、「eventmachine」が必要なときに、EventMachine の定義を含まない同じファイルをインポートしただけです。
したがって、これは実際には EventMachine に関する投稿ではありません。
元の投稿:
すみませんが、何が起こっているのですか?
与える
「ruby myfile.rb」を実行すると、TextMate とコンソールの両方で。
しかし、同じことを IRB に入力すると、
.
...
私は非常にイライラして、http://blog.carlmercier.com/2007/12/14/how-to-fix-that-rubygems-mess-on-leopard/の無謀な指示に従いました-- 私の Ruby とRubygems 環境と MacPorts からの再インストール。IRB は引き続き機能し、TextMate/コマンドラインは引き続き同じように失敗します。TextMate PATH を、Ruby、Gem、および IRB が現在インストールされている 1 つの場所 (/opt/local/bin) にまで減らしました。
最後に、私が
IRB、TextMate、またはコンソールのいずれかで、同じパスを取得します。
ruby - Eventmachine: 同時実行
接続を受信し、いくつかの処理を行い、標準ポートで応答を返す単純なプログラムがあります。これは同期的に行われるため、1 つの要求に時間がかかりすぎると、同時要求は処理されません。
Deerrable は、ブロッキング リクエストが発生していても、複数のリクエストを同時に処理できるようにするための方法ですか?
ありがとう、