uv__queue_done:断言`(((req-> loop)-> active_reqs.count> 0)'失败吗?

时间:2019-03-12 14:24:52

标签: c++ node.js node-modules nodejs-server

最近,我们正在测试带有C ++插件的Node.js,以提高请求处理的可伸缩性。

请按照以下步骤进行详细了解:

  1. 我们在C ++插件中注册了Node.js的回调函数。每当有请求进入时,都会从C ++插件中调用该回调函数。

  2. 初始请求将首先到达C ++插件,然后到达Node.js回调函数。

  3. 但是,如果我们将请求负载超过一个小时左右,则它会因我上面提供的错误而崩溃。

请查看以下代码。初始呼叫为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);
}

谢谢

0 个答案:

没有答案