最近我们正在测试带有 C++ 插件的 Node.js,以实现请求处理的可扩展性。
请按照以下步骤进行更多了解:
我们在 C++ 插件中注册了 Node.js 的回调函数。每当有请求进入时,它就会从 C++ 插件中调用(回调)。
初始请求将首先点击 C++ 插件,然后它会点击 Node.js 回调函数。
但是,如果我们将大量请求加载超过一个小时左右......它会因我上面提供的错误而崩溃。
请看下面的代码。最初的电话是sendData
:
struct Work {
int status;
uv_work_t request;
string data;
Persistent<Function> callback;
};
static void WorkAsync(uv_work_t *req) {
//Work *work = static_cast<Work *>(req->data);
}
static void WorkAsyncComplete(uv_work_t *req, int status) {
Isolate * isolate = Isolate::GetCurrent();
v8::HandleScope handleScope(isolate); // Required for Node 4.x
Work *work = static_cast<Work *>(req->data);
Handle<Value> argv[1];
argv[0] = String::NewFromUtf8(isolate, work->data.c_str());
Local<Function>::New(isolate, m_work->callback)->Call(isolate->GetCurrentContext()->Global(), 1, argv);
pthread_mutex_unlock(&queue_mutex);
}
void sendData(std::string str) {
pthread_mutex_lock(&queue_mutex);
m_work->data = str;
uv_queue_work(uv_default_loop(),&m_work->request, WorkAsync, WorkAsyncComplete);
}
谢谢