問題タブ [libev]
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.
c - mqueue で Libev io を使用する方法
mqueue で ev_io を使用するにはどうすればよいですか? 運が悪いので、次のことをやろうとしています。
タイマー コールバックを取得できますが、メッセージをキューに送信するときに io コールバックが呼び出されることはありません。libev で POSIX mqueue を使用することは可能ですか?
c - ev_loop() で valgrind エラーが発生 - アドレスがスタック ptr のすぐ下にある
C で IRC デーモンを実装するプロジェクトに取り組んでいます。これはまだ非常に初期の開発段階にあり、現在のところ、メイン プロセスで新しい接続を受け入れ、新しい接続ごとにスレッドを作成するだけです。 . クライアントからのすべてのメッセージは、接続されている他のすべてのクライアントにブロードキャストされます。
ソケットの読み取り時にスレッドがブロックされないように、libev のコールバック メカニズムを使用しています。各スレッドは、独自の個別のイベント ループを使用します。ここに私のmain()
機能の一部があります:
私は libev の専門家ではありません。libev のドキュメントとサンプル プログラムを読んでいます。このコードは期待どおりに機能しますが、valgrind で実行すると、次のエラーが発生します。
71 行目は次の命令です。
クライアントが接続されていない状態で、プログラムを起動するとすぐにエラーが表示されます。私が電話したという事実だけで、ev_loop
このエラーが発生します。
修正方法がわかりません。これまでにコーディングしたものが IRC サーバーのコアとなるものであり、バグが存在しないことを絶対に確認したいと考えています。きれいな valgrind 出力が欲しいです。
助言がありますか?
更新: サンプル プログラム ( http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#EXAMPLE_PROGRAM ) をコンパイルして実行したところ、valgrind が同じエラーを報告しました。これは のバグでlibev
あるか、例が適切にコーディングされていないと推測しています。valgrind に関するセクションも読みました - http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#VALGRIND - しかし、それについて特別なことは何も見つかりませんでした。彼らのメーリングリストを試してみようと思います。
php - 参照間でオブジェクトが一時的に空になる
PHP プロセス全体で非同期呼び出しを行うために非常に小さなライブラリに取り組んでおり、オブジェクト (および配列) の参照に関して奇妙な動作が発生しています。オブジェクトまたは配列の参照に関係なく同じ問題が発生します)。最終結果は、オブジェクトと配列が一時的に空に見えることであり、私はこれがなぜ起こるのかを見つけようとしています.
次の画像は、親プロセスから 3 つの子を生成するスクリプトのトレースを示しています。すべての出力は親プロセスからのものです (子プロセスから端末に漏れることはありません)。親プロセスは子プロセスに一連のリクエストを送信し、一対の FIFO パイプを介してレスポンスを受け取ります。
- 青の行は、親が正常に応答を送受信した場所を示します。
- 赤い行は、親が応答を正常に送受信した場所を示しますが、応答を受信すると、RPC の表現を含む親のオブジェクトが不思議なことに「空」であるため、その RPC 応答に関連付ける必要があるアクションを実行できません。参照できないため呼び出されません。
- 金色の行は、各成功または失敗の前に表示され、応答を待機しているすべての RPC を保持するオブジェクトの状態を示します。行には、オブジェクト ID (オブジェクトの var_dump をスクレイピングしたもの) とそれが持つキー (子からの応答を待機している各 RPC の ID) が含まれます。
問題は次のように示されます。
緑色のリングのそれぞれで、同一のオブジェクトを参照していることがわかります。これは、PHP によって提供される内部 ID 参照です。緑色の輪が付いた最初の行では、オブジェクトには必要なすべてのプロパティがあります。
赤いリングのそれぞれには、「失敗」した RPC の ID があります。これは、2 行目の緑のリングで、オブジェクトが不思議なことに空になっているためです。
プロセスの後半、緑の輪のある 3 行目で、オブジェクトは魔法のようにすべてのプロパティを元に戻します。
ノート:
- これは完全にランダムに発生します。
- これは、配列を使用する場合も同じように発生します (私は元々、オブジェクトの代わりに配列を使用していましたが、この動作を回避するためにオブジェクトを試してみました)。
sockets - libevent bufferevents を使用してソケットにデータが読み込まれるまでアプリケーション プロセスを待機させるにはどうすればよいですか?
初めて libevent を使用していますが、読み取りコールバックが呼び出されるまでアプリケーションを実行しないようにしようとして問題が発生しています。私もバッファイベントを使用しています。基本的に私がやっているのは、メインアプリケーションループでスリープを回避し、代わりに、ソケットから読み取るデータがある場合に OS にプロセスを (libevent を介して) ウェイクアップさせることです。誰でもこれを行う方法を知っていますか? libevent のアルファ ビルドで、ベース イベント ループを EVLOOP_NO_EXIT_ON_EMPTY に設定できることがわかりましたが、libevent コードを見ると、proc 全体を使い果たしてしまうと思います。私もこれについて読んだWindowsでソケットをブロッキングに設定するのは悪い考えだという質問があるため、解決策としてそれを行っていません。libuv と libev も同様であり、私のソリューションに貢献する可能性があるため、これをマークします。
c - LibEV 正しくバッファする方法は?
書き込みバッファを適切に作成するにはどうすればよいですか? 現在、割り当てられたバッファのリンクされたリストを使用していますが、ほとんどの書き込みは数バイトしかありません。効率的な書き込みバッファを作成するための提案は何ですか?
perl - EV での合成ファイルハンドルの使用 (perl)
このように作成されたファイルハンドルオブジェクトがあります(わかりやすくするために少し編集されています):
と一緒に使いたいですAnyEvent
。では問題なく動作しAnyEvent::Impl::Perl
ますが、 では失敗し
AnyEvent::Impl::EV
ます。からこのメソッドまで追跡したと思いますEV
:
審査落ちだと思いますSvTYPE (fh) == SVt_PVGV
。Devel::Peek
の Dump() メソッドを使用すると、次のようになります。
このテストに合格できるようにハンドルの作成を調整する方法についての支援をいただければ幸いです。