問題タブ [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.
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を構成するにはどうすればよいでしょうか?
node.js - libuv はブロッキングファイルシステム呼び出しを内部的に使用しています – なぜ? どのように?
Node.js の王冠libuvがファイル操作のブロック システム コールを使用していることを知りました。非同期動作はスレッドで実装されています! これにより、2 つの疑問が生じます (私はUnixだけに関心があります)。
- ネットワークのようにノンブロッキング ファイルシステム コールを使用しないのはなぜですか?
- 未処理のファイル読み取りが 100 万回ある場合、おそらく 100 万個のスレッドを起動しません... libuv は何をしますか??
c++ - 関数への参照を保存して、後で node.js C++ アドオン モジュールで呼び出すことができるようにするにはどうすればよいですか?
これは、私が C++ で作成し、node-gyp を使用してビルドした node.js アドオン モジュールです。StoreFunction の場合、後で使用できるように関数へのポインターを保存しようとしています
InvokeFunction で後で呼び出そうとすると、セグメンテーション違反が発生します。両方の関数で (cout を使用して) ポインターを調べた場合、それらは同じ値であることに困惑しました。
したがって、2 つの関数を呼び出す間に呼び出しコンテキストが変更されるか、何を指しているのか理解できないと推測しています。
ここで私の問題について感謝して受け取ったすべての(うーん)ポインタ..............
そしてもちろん、js を呼び出すものもあります........
node.js - 別のスレッドで V8 オブジェクトを作成し、それを nodejs スコープにコピーする方法は?
非常に長い JSON テキストを JSON オブジェクトに解析する必要があります。次のコードで実行時間を測定しようとしました。
約 0.5 ミリ秒かかります。これはかなりの時間です。nodejs は V8 エンジン用にシングルスレッドであるため、この操作が非常に重く頻繁に行われると、スループットに大きな影響を与えます。
したがって、NodeJS ネイティブ アドオンとして C 言語で非同期 JSON.parse を記述しuv_queue_work
、重い操作を別のスレッドで実行し、マルチコアを使用して nodejs メイン ループを占有しないようにする予定です。
問題は、nodeJS の V8 オブジェクトが、メイン スレッド以外のスレッドからアクセスできないことです。
テキストを解析して別のスレッドで V8 オブジェクトを作成し、新しく作成された V8 オブジェクトをメイン スレッドにコピーする方法はありますか?
Br