【问题标题】:Blocking issue in Express / NodeExpress / Node中的阻塞问题
【发布时间】:2017-08-21 09:49:35
【问题描述】:

我在 node.js 中遇到了一些与 express 相关的阻塞问题。 目前,我现在有这个代码:

router.get('/Hello', function(req, res, next) {
  (async ()=>{
      try{
          await api.connect();
          let result=await api.HandleSomethins();
          await api.disconnect();
      }catch(err){
       console.log(err);
      }
  })();
  return res.status(json(result));
});

上面的代码没有问题,我只是使用async/await来同步一些重载过程。

然后我得到以下情况:

  • 1.UserA用这个url连接我的node.js,UserA正在等待 立即回复。
  • 2.此时UserB也连接了,所以node.js无法立即处理UserB的请求。
  • (注)。我需要向用户客户端(iOS/Android)发送响应。

也许节点服务器会同时获得 UserC、D 等。我该怎么办才能处理这种情况? child_proess?簇?还是别的什么?

【问题讨论】:

  • 这取决于api.HandleSomethins() 的作用。是否占用大量 CPU?另外,真的有必要为每个请求连接/断开“api”吗?
  • 离题。我几乎可以肯定上面的代码有问题。它应该在未定义 result 时引发引用错误。
  • 请出示api.connect()api.HandleSomethins()代码。
  • 我不确定它是否占用大量 CPU,但它需要时间来做一些事情
  • 我简化了细节代码,这里只使用HandleSomething()来表示复杂的api。其实api并没有反馈给我,只是根据api的response(result可能是自定义flag)

标签: javascript node.js http express


【解决方案1】:

试试这样的:

router.get('/Hello', async (req, res, next) => {
        let result = null;
        try {
              await api.connect();
              result = await api.HandleSomethins();
              await api.disconnect();
        } catch (err) {
              console.log(err);
        }

        return res.status(json(result));
});

【讨论】:

  • 标记为已回答。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 2012-07-10
相关资源
最近更新 更多