[英]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
情况下运行此代码的正确方法是什么?
您有三个基本选择:
重新设计loadRound()
以免阻塞事件循环。 由于您尚未共享任何代码,因此我们无法建议这样做的可行性,但是,如果它正在执行任何I / O,则无需阻塞事件循环。 即使只是CPU工作,也可以将其设计为小块完成工作,以允许事件循环进行一些循环,但是与下面的选项2和3相比,用这种方式重新设计通常需要更多的工作。
将loadRound()
移至工作线程 (node.js中的新增功能),并通过消息传递回结果。
使用child_process模块将loadRound()
移至单独的node.js进程,并通过多种方式(stdio,消息传递等)将结果传递回去。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.