[英]Express.js with Node.js, multiple clients
我在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 │
└───────────────────────────┘
您可以在以下网址中详细了解这些阶段: https : //nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
简而言之:
同样,大部分内容来自Node.js文档,但我已经详细说明了一些细节,以提供一些有关此上下文的理解。
在您的情况下,您的数据库操作不会“阻止”其他用户,他们只需要等待直到通过循环处理其回调即可。 如果同时执行许多操作,则会将更多操作卸载到内核,然后尽快进行备份,这可能会带来一些额外的延迟(1) 。
本文还提供了另一个有助于形象化此过程的良好图形: https : //webapplog.com/you-dont-know-node/
在旁注-
在某些地方,Node.js的事件循环是一个很好的解决方案,而在其他地方,更健壮的多线程解决方案可能是一个更好的解决方案。 确保您进行所需的研究以明智地做出与您的项目细节相关的决定,这绝不是一个坏主意。
(1)仅有几篇文章供您搜索,有关性能差异,网络负载过重的预期延迟以及针对此问题的各种解决方案。
我希望这有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.