Articles of libuv

nodeJS中的uv和v8是什么?

在deps文件夹中有2个目录uv和v8 第一个问题:deps目录的定义是什么? 我的第二个问题:Node.js中的uv和v8工具是什么?

如何在本机C ++ / nodejs插件实现asynchronous构造函数/工厂调用?

我对C ++和node / v8 Addon开发相当陌生。 我试图包装第三方C库。 一些初始化函数运行时间很长,我想运行这些asynchronous操作(在libuv的帮助下)。 鉴于我有以下代码: #define BUILDING_NODE_EXTENSION #include <node.h> #include "myobject.h" //header files of 3rd party lib to be wrapped #include "3rdparty.h" using namespace v8; MyObject::MyObject(void* base) : baseobject_(base) {}; MyObject::~MyObject() {}; void MyObject::Init(Handle<Object> target) { // Prepare constructor template Local<FunctionTemplate> tpl = FunctionTemplate::New(New); tpl->SetClassName(String::NewSymbol("MyObject")); tpl->InstanceTemplate()->SetInternalFieldCount(1); Persistent<Function> constructor = Persistent<Function>::New(tpl->GetFunction()); target->Set(String::NewSymbol("MyObject"), constructor); […]

asynchronous构buildV8string数组

我正在构build一个节点模块来与libapt进行交互,以便列出和控制已安装的软件包。 我通过实现一个函数来获取每个已安装软件包的名称,从而开始简单。 我已经撞墙了。 我目前有这样的代码: #include <apt-pkg/init.h> #include <apt-pkg/cachefile.h> #include <apt-pkg/pkgcache.h> #include <node.h> #include <v8.h> using namespace v8; typedef struct AsyncData { Persistent<Function> callback; // callback function Handle<Array> packageList; // array of package names } AsyncData; void AsyncWork(uv_work_t *req) { AsyncData *asyncData = (AsyncData *)req->data; asyncData->packageList = Array::New(); size_t i = 0; for (pkgCache::PkgIterator package = […]

nodejs中的libuv线程如何利用多核CPU

我无法确定node.js中的libuv是使用多核心cpus还是仅使用时间片在单核上运行其所有线程? 由于node.js是单线程的,但libuv有它的oswn线程池,所以它使用多核心cpu的所有核心?

如何编写利用线程的Node.js代码?

所以这是我对节点如何工作的理解: 所有JS代码都在其中执行的单线程。 IO /networking调用在场景后面使用线程池。 (使用libuv这是一个C ++库) 一旦IO操作完成,它的callback被压入callback队列,并且callback可以被下一个滴答中的事件循环拾取。 我想了解的是如何编写可以利用系统线程的代码? 我在C / C ++中编写一个库,并提供一个JavaScript的绑定? 比方说,我有一些不需要IO但是CPU密集的操作/function,所以我想在多个线程中运行它。 我将如何做到这一点在节点?

在C ++插件中的Node.js / Nancallback中不常发生Segfault

我正在做一个NodeJS插件使用Nan库,我遇到了一个问题,调用一个callback(在JavaScript方面创build,并传递给插件以asynchronous执行)将导致段错误 – 但只有一次10万左右跑。 在所有事情的运作方面都有相当的复杂性,但我希望有人会看到我错过的东西,或者能够弄清楚发生了什么。 C ++callback函数是这样从javascriptcallback中创build的: auto nodeFunc = val.As<v8::Function>(); auto nodeCb = std::make_shared<Nan::Callback>(nodeFunc); auto callback = [nodeCb] (std::string err, std::string val) -> void { Nan::HandleScope scope; v8::Local<v8::Value> argv[2]; if (err.length() == 0) { auto isolate = v8::Isolate::GetCurrent(); auto json = v8::JSON::Parse(isolate, Nan::New(val).ToLocalChecked()); auto object = json.ToLocalChecked(); argv[0] = Nan::Null(); argv[1] = object; } else […]

节点插件使用libuv和uv_async_send – 节点进程不会退出

我有一个要求从一个节点插件调用一个Javascript函数。 插件将有一个连续运行的后台线程,所以它不是使用async_queue_work的经典asynchronous工作者需求。 我认为uv_async_send在这种情况下更合适。 我想在节点事件循环中放置一个函数,只要节点是空闲的就执行。 这个函数应该在主节点线程中运行。 要开始我有一个非常简单的插件,我正在试验uv_queue_work与uv_async_send 。 我可以同时工作,但在uv_async_send的情况下,节点进程永远不会退出。 node-uv.cc #include <node.h> #include <uv.h> using namespace v8; static void Runner(uv_work_t *req) { printf("Async work running!\n"); } static void RunDone(uv_work_t *req, int status) { delete req; printf("Async work done!\n"); } static void Runner2(uv_async_t* handle) { printf("Got async send!\n"); } void Start(const FunctionCallbackInfo<Value>& args) { printf("In run async\n"); […]

如何使用node-gyp根据节点版本有条件地编译node.js的本地代码?

我为node.js模块编写了一些C ++代码,这个模块是为节点0.8和增强的libuv编写的。 具体来说,我使用的是uv_mutex_ *函数,它不包含在节点0.6中包含的libuv中。 我想有条件地embedded这些函数的pthreads等价物,但是只有在旧版本的基础上构build。 如果节点版本为0.6,这应该使我在build立在节点0.8上的跨平台构build(Windows和Linux)和正常运行的Linux版本。 是否有节点版本的预处理器#define? 我找不到一个。 我能想到的最好的办法是在binding.gyp中做一些kludgy的东西来尝试猜测基于<@(node_root)的版本,并以某种方式将其按到“定义”值中。 一定会有更好的办法!

Nodejs进程locking从阻塞FUSE文件读取

我有一个nodejs webserver读取文件并提供内容。 其中一些文件是FUSE虚拟文件,这些文件在后台服务等待数据提供时可能会阻塞很长一段时间的读取。 看来,如果这些读取请求中的5个堆积起来,该过程将不再从任何文件读取。 此外,我不知道如何终止这些挂起的读取,如有必要。 这是nodejs的限制还是FUSE文件系统的行为方式与FUSE的期望不一致?

nodejs使用libuv插件asynchronouscallback

我有一个节点js服务调用本地C库。 本土的图书馆,反复不断地发生火灾事件。 这些事件被传递给Ccallback函数。 我的目标是从这个本地Ccallback调用Javascriptcallback。 根据我的阅读,我使用uv_async_init和uv_async_send来实现这个目标。 我遇到的问题是我的本地Ccallback函数被调用了很多次,并且在那里uv_async_send被调用了很多次,但是传递给uv_async_init的函数只被调用了一次,只有当我的程序退出的时候。 这是我的C代码: ================================================== === #include "jsaudio.h" #include <iostream> using namespace v8; static void recordAudioCallback(int index); void asyncmsg(uv_async_t* handle); Callback* cbPeriodic; uv_async_t async; uv_loop_t* loop; NAN_METHOD(createEngine) { std::cout << "==> createEngine\n" ; } void createAudioRecorder(const Nan::FunctionCallbackInfo<v8::Value>& info) { std::cout << "==> createAudioRecorder\n"; } void startRecording(const Nan::FunctionCallbackInfo<v8::Value>& info) { std::cout << "==> […]