1 javascript mysql node.js express
我在Google上找不到很好的答案,所以我在这里尝试。
我的应用程序包括:Express.js,node.js和一个MySQL数据库。但是,此应用程序需要为多个客户端提供服务。
在我的代码中,我需要使用回调,以便程序在继续之前等待数据库查询完成。这会影响想要同时访问数据库的其他用户吗?
为了明确回答这个问题,我认为需要对Node.js异步事件循环有更深入的了解。
JavaScript是单线程的,并且使用此异步事件循环,Node.js可以在此单线程上执行非阻塞I / O操作。
它实现此目标的方法是在需要时(例如,在有许多请求或I / O操作时)将操作分流到内核,然后在事件循环中稍后的时间将结果取回。 “投票”阶段。
为了进一步说明,我提供了Node.js文档中提供的图表:
?????????????????????????????
??>? timers ?
? ?????????????????????????????
? ?????????????????????????????
? ? pending callbacks ?
? ?????????????????????????????
? ?????????????????????????????
? ? idle, prepare ?
? ????????????????????????????? ?????????????????
? ????????????????????????????? ? incoming: ?
? ? poll ?<?????? connections, ?
? ????????????????????????????? ? data, etc. ?
? ????????????????????????????? ?????????????????
? ? check ?
? ?????????????????????????????
? ?????????????????????????????
???? close callbacks ?
?????????????????????????????
Run Code Online (Sandbox Code Playgroud)
您可以在以下网址详细了解这些阶段:https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
简而言之:
同样,大部分内容来自Node.js文档,但我已经详细说明了一些细节,以提供一些有关此上下文的理解。
在您的情况下,您的数据库操作不会“阻止”其他用户,他们只需要等待直到通过循环处理其回调即可。如果同时执行许多操作,则会将更多操作卸载到内核,然后尽快进行备份,这可能会带来一些额外的延迟(1)。
本文还提供了另一个有助于形象化此过程的良好图形:https : //webapplog.com/you-dont-know-node/
在旁注-
在某些地方,Node.js的事件循环是一个很好的解决方案,而在其他地方,更健壮的多线程解决方案可能是一个更好的解决方案。确保您进行所需的研究以明智地做出与您的项目细节相关的决定,这绝不是一个坏主意。
(1)仅有几篇文章供您搜索,有关性能差异,网络负载过重的预期延迟以及针对此问题的各种解决方案。
我希望这有帮助!