問題タブ [libuv]
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.
javascript - ネイティブ ノード モジュールで、非同期コードが常に同じスレッドで実行されていることを確認するにはどうすればよいですか?
C ライブラリのバインディングとなるネイティブ ノード モジュールを C++ で作成しています。
このライブラリの一部のオブジェクトは、単一のスレッドでのみ使用する必要があります。uv_queue_work
つまり、私が使用する場合、それらが同じスレッドによってのみ使用されていることを確認できないことを意味します。なぜなら、私の知る限り、 libuv はスレッドプールを使用しており、どのスレッドかを伝える方法を見つけることができなかったからです。このような作業に使用します。
ここに状況に対するいくつかのアイデアがありますが、どちらが正しいアプローチかはわかりません。
- すべてのメソッドを同期させるだけです。残念ながら、これはノードの目的と概念を打ち負かします。
- カスタム スレッドを作成し、その上でコードを実行します。これは、libuv のスレッド プールの目的を無効にし、より多くの作業が必要になります。
- libuvに、スレッドプール内の同じスレッドで同じオブジェクトの操作を実行するように伝えます-ドキュメントでこれを行う方法が見つかりませんでした
この種の Node.js モジュールに対して推奨される一連のアクションは何ですか?
c - UV_RUN_NOWAIT モードは libuv でどのように機能しますか?
関数を使用して libuv でイベント ループを実行する場合uv_run
、次の値で使用される「モード」パラメーターがあります。
最初の 2 つは明らかです。UV_RUN_DEFAULT
イベントがなくなるまでイベント ループを実行し、UV_RUN_ONCE
ループから 1 つのイベントを処理します。ただし、UV_RUN_NOWAIT
別のモードではなく、他の 2 つの値のいずれかと OR できるフラグのようです。
デフォルトでは、この関数はイベントの処理が完了するまでブロックし、非ブロックにしUV_RUN_NOWAIT
ますが、私が見つけることができるドキュメントはそこで終わります。私の質問は、イベント ループ ノンブロッキングを実行する場合、コールバックはどのように処理されるかということです。
libuv イベント モデルはシングル スレッド (リアクター パターン) であるため、コールバックを呼び出すにはブロックする必要があると思いますが、メイン スレッドが占有されている場合、処理後のイベントはどうなりますか? libuv が再びメイン スレッドの制御を取得するまで、コールバックは「キュー」に入れられますか? または、コールバックは別のスレッドでディスパッチされますか?
javascript - pg db クエリでノード アサーションが失敗しました
Windows 7 の nodejs (0.10.13) で any-db (0.0.6) と pg (2.1.0) を使用してクエリを実行しています。npm を使用したすべてのインストールは問題ないようです。接続プールを設定できますが、低レベルのエラーで失敗します:
スロー: アサーションに失敗しました: 0、ファイル c:\node-v0.10.13-x64\deps\uv\src\win\req-inl.h、219 行目
(try/catch でキャッチできません。さらに、そのディレクトリは存在しません...)
試したノードのバージョン: 0.10.12 および 0.10.13
pg のインストールに問題がありましたが、問題ないようでした。インストール メッセージは次のとおりです。
どんなアイデアや助けも大歓迎です!
更新 1
コンピューターの再起動後、エラー メッセージが次のように変わりました: Assertion failed: 0, file src\win\poll.c, line 87
これはこれを参照しているようです: https://github.com/joyent/libuv/blob/master/src/win/poll.c
他のエラーも断続的に発生します。
v0.10.10 を試してみました。最初のエラーが発生しました。
更新 2
ノードv0.10.13-x86(x64ではなく)で試しました。私のコードは pg の再インストール後に正しく実行されているようですが、pg の再インストール中に (npm を使用して) エラーがスローされます。
c++ - nodejsアドオンでウィンドウメッセージをポンプするにはどうすればよいですか?
Windows nodejs アドオンで、メッセージを受信するためのウィンドウを作成しました。
wndproc 関数があります。
次に、メッセージをポンピングする必要があります。通常、次のようなことをします
...しかし、それは v8 イベント ループをブロックするだけなので、うまくいきません。
v8 をブロックせず、ウィンドウがメッセージを受信したときに JS 関数を呼び出せるように Windows メッセージを送り込むにはどうすればよいですか?
libuv が役割を果たすと思いますが、別のスレッドで実行されている C から JS 関数を安全に呼び出す方法が正確にはわかりません。特に、uv_async_send
呼び出すたびにコールバックを呼び出すことが保証されていないため、私の JS コールバックは、ウィンドウ メッセージが受信されるたびに呼び出されます。
c - 名前を変更せずに共有オブジェクトで定義された C 関数を使用する
私はオンラインブックBasics of libuvを読んでいて、libuv ライブラリへの静的リンクと動的リンクの両方で動作するようにそれらを書き直そうとしています。ウォッチャーの例 (以下のコード)を書き直しましたが、機能させるために libuv.dylib から取得した関数の名前を「変更」する必要がありました。どういうわけか同じ関数名を保持できますか?
コードを次のようにしたい。
現在、こんな感じです。
node.js - node.jsプロセスをデバッグするためのベストプラクティス?
私のnode.jsサーバーは大量のEMFILEを取得しており、libuvがkqueue()を作成できないため、最終的に中止されます。だから、それが起こったときに何が開いているのかを見たい. サーバーをフォークし、サーバーがクラッシュするのを待ってから「lsof -p」を実行する添付のスクリプトを作成しました。
ドキュメントからの私の理解は、フォークされた子が終了すると、 process.exit() が発生するまで保持されるということです。lsof は、ゾンビが消去される前に、ゾンビの記述子を調べることができるため、これで問題ありません。
ただし、 exec() lsof への呼び出しは、常にエラー パラメータ (lsof パッケージがチェックしないもの) を使用してコールバックを呼び出します。
しかし、多分私はこれを間違った方法で見ています。この分野でのベストプラクティスは何ですか?
c - uv_loop_new への libuv 未定義参照
コンパイル後、libuvサンプル プログラムを実行しようとしています。
しかし、実行しようとすると、次のエラーが発生します。
どこで私は間違えましたか ?
PS: #include "uv.h" では動作しません
c - libuv は、バッファーを接続にアタッチして再利用する機能を提供しますか?
私が書いている C/c++ サーバーのライブラリとして libuv を評価しています。プロトコルには長さのプレフィックスが付けられているため、ストリームから 32 ビット整数を読み取るとすぐに、割り当てる必要があるバッファーのサイズがわかります。ドキュメントには、uv_read_start 関数が複数回呼び出される可能性があると記載されています。
UV_EXTERN int uv_read_start(uv_stream_t*, uv_alloc_cb alloc_cb,
uv_read_cb read_cb);
長さのプレフィックス付きプロトコルを使用しているため、バッファーの適切なサイズがわかったら、それを割り当てて、すべてのバイトを受信するまで後続の読み取りに再利用したいと思います。libuvでこれを行う簡単な方法はありますか? 現時点では、 uv_alloc_cb 関数がこれを処理する必要があるようです。バッファをマップなどに配置する代わりに、ストリーム オブジェクトに関連付けることはできますか?
長さのプレフィックス付きプロトコルを使用しているため、最初の 4 バイト (32 ビット) を読み取ることができるまで、ヒープにバッファーを割り当てたくありません。サイズ 4 のバッファをスタックに割り当て、実際に uv_read_cb 関数でヒープ割り当てを行うことはできますか? uv_read_cb 関数は uv_read_start 関数の一部として同期的に呼び出されますか? その場合、ストリームにまだバッファが接続されていないことがわかっている場合は、スタックに割り当てることができるはずです。
c - libuvで最小限のプログラムをコンパイルするにはどうすればよいですか?
C でプログラムを書いてからかなりの時間が経ちましたが、それでも実際のコンパイルとリンクはかなり混乱していました。
私は最近 node.js で遊んだり作業したりしているので、内部をのぞき見するのに十分なほど好奇心が強くなり、現在 libuv を見ています。
いくつかの優れたガイドを見つけましたが、実際のコンパイル部分はほとんどスキップされていることがわかりました。ほとんどの場合、興味深い人は誰でも gcc を頻繁に使用するという公正な仮定によるものです。
gtihub から最新の libuv を zip としてダウンロードし、作業フォルダーに解凍しました。README.mdに従ってコンパイルしてインストールしました。これはすべてうまくいき、何の問題もありませんでした。
私がコンパイルしようとしているコードはhttp://nikhilm.github.io/uvbook/basics.htmlから来ています
これを main.c として保存しました
これは私が使用している Makefile です。さまざまな情報源から集められたものであり、この分野に関する私の知識は控えめに言っても曖昧であるため、これが問題であると思われます。
これはmakeを実行した結果です。
これはlibuvに固有のものではないことを認識していますが、これはまさに私がいるところなので、どんな助けも大歓迎です。
Ubuntu 13.04 を使用しています
r - Rook クラスと httpuv を統合する方法
Webアプリケーションが「Rook仕様に従って実装されている」ことを知って、httpuvでいくつかのRookクラス(Middleware、builder、Brewery、およびfileなど)を実行しようとしています。( httpuv ドキュメントから)。
ただし、すべての Rook 仕様が httpuv パッケージに実装されているわけではないようです。
Rook には Web サーバー (Rhttpd) がありますが、httpuv はより高いパフォーマンス (Libuv ベース) を提供し、webSocket などの機能を備えています。
それで、私の質問は、そのような言及されたクラスを httpuv で使用しようとした人はいますか? そのような統合に役立つサイト、ブログ、またはドキュメントを知っている人はいますか?
私が知っているのは、httpuv と Rook をロードし、httpuv サーバーを実行していることです。
では、Rook クラス (ミドルウェア、ビルダー、醸造所、ファイルなど) を使用して統合し、 webappを構成するにはどうすればよいでしょうか?