nodejs+koa2如何处理请求中耗时操作

来自山卡拉的你 发布于 2017/05/07 11:23
阅读 548
收藏 0

刚接触nodejs,准备用koa2写一个restful api服务器,服务里面涉及到耗时操作,我在网上看到nodejs是单线程的,如果前一个请求还没完成,然后再来一个请求,应该如何处理,我现在用的中间件是koa-router,片段代码大概如下

const testAPI = async(ctx, next) => {
 
    const promise = (data) => {
        return new Promise((resolve, reject) => {
            const worker = child_process.fork('./server/workers/worker.js')
            worker.on('message', (m) => { //接收工作进程计算结果
                if ('object' === typeof m && m.type === 'fibo') {
                    
                    worker.kill(); //发送杀死进程的信号
                    resolve({
                        word1: "hello",
                        word2: "world"
                    })
                }
            });

            worker.send({ type: 'fibo', num: counter_ });

        })
    }
    const data = await promise(1)
    ctx.body = data
}

router.get('/test', testAPI)

由于存在耗时操作,本来是打算丢到工作进程的,但是不知道怎么处理这个结果,然后我使用了Promise,但是结果又需要使用await才能拿的到,但是在await返回之前再进来一个请求,就得排队等待。如果异步处理的话,在工作进程结果处理完成之前,请求就直接被返回了,客户端根本就拿不到想要的结果,而且如果工作进程耗时很长。

    我的问题是,能不能做得到异步返回结果,不影响其他新的请求?求大神支招,因为初学nodejs,以上的思路都是根据之前搞C++的多线程服务器想法得出来了,如果有什么不清楚,望指出,谢谢

加载中
1
方舟编译器
来自山卡拉的你
来自山卡拉的你
回复@真座山雕 : 谢谢,后来发现是浏览器问题,换个工具测试就没问题了
返回顶部
顶部