繁体   English   中英

正确地在node.js中运行同步代码而不阻塞的方法

[英]Correct way to run synchronous code in node.js without blocking

我在node.js有一个websocket服务器,它允许用户解决给定的难题。

我也有一个代码,可产生约20秒的随机拼图。 同时,我仍然想处理新的连接/断开连接,但是此同步代码blocks the event loop

这是简化的代码:

io.on('connection', socket => {
//
});

io.listen(port);

setInterval(function() {
    if (game.paused)
        game.loadRound();
}, 1000);

loadRound运行大约20秒钟,这会阻塞所有连接和setInterval本身

在不blocking event loop情况下运行此代码的正确方法是什么?

您有三个基本选择:

  1. 重新设计loadRound()以免阻塞事件循环。 由于您尚未共享任何代码,因此我们无法建议这样做的可行性,但是,如果它正在执行任何I / O,则无需阻塞事件循环。 即使只是CPU工作,也可以将其设计为小块完成工作,以允许事件循环进行一些循环,但是与下面的选项2和3相比,用这种方式重新设计通常需要更多的工作。

  2. loadRound()移至工作线程 (node.js中的新增功能),并通过消息传递回结果。

  3. 使用child_process模块​​将loadRound()移至单独的node.js进程,并通过多种方式(stdio,消息传递等)将结果传递回去。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM