最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

[其中之一花费太多时间时如何同时响应不同的请求

运维笔记admin8浏览0评论

[其中之一花费太多时间时如何同时响应不同的请求

[其中之一花费太多时间时如何同时响应不同的请求

我有2个请求1 /斐波那契(大约需要10秒)和2 / hello(立即)

当我尝试在斐波那契之后连续运行2页“消息”时我都用邮递员get-http://localhost:3001/fibonacci后[http://localhost:3001/hello

所以我的代码同步运行,但我希望它异步运行,我尝试了promise并等待,但是它们都对我不起作用。

const express = require('express')
const app = express()
const bigInt = require("big-integer");

const port = process.env.PORT || 3001

app.get('/fibonacci',async (req,res) => {
   res.send(fibonacci(bigInt(700000)))
})

app.post('/hello',async (req, res) => {
   res.send("message")
})


const fibonacci = (num) => {
   var a = bigInt(1), b = bigInt(0), temp = bigInt
   while (num > 0){ 
      temp = a 
      a = (a.add(b))
      b = temp 
      num= (num.add(-1)) 
   }
  return b;
}

app.listen(port, () => {
    console.log('Server is up on port ' + port)
}) 

我希望可以立即看到所看到的消息,但这是在斐波那契计算之后得出的。

回答如下:

Node.js异步运行,但它不是多线程的。因此,一旦您的节点/表达程序开始运行fibonacci(),在该功能完成之前,它将无法运行其他任何东西。

为了使您的节点/表达程序保持响应,您必须找到一种方法来使用setTimeout()对Fibonacci计算的小块进行逐个调度,直到计算完成为止。使用setTimeout()可让node.js暂停处理计算以处理其他事情。

对类似Fibonacci的算法进行分组需要一些思考和大量测试。为您执行此操作超出了StackOverflow答案的范围。另外,如果这里有这样的答案,人们可​​能会将其用作魔术,而不是理解它。

这里是另一个问题,提供了一些有用的答案。 How to break up a long running function in javascript, but keep performance

发布评论

评论列表(0)

  1. 暂无评论