加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

Node.js事件循环 – nginx / apache

发布时间:2020-12-13 21:35:55 所属栏目:Nginx 来源:网络整理
导读:nginx和Node.js都有事件循环来处理请求.我把nginx放在Node.js前面,就像这里推荐的那样 Using Node.js only vs. using Node.js with Apache/Nginx 使用此处显示的设置 Node.js + Nginx What now? 两个事件循环如何一起运作?两者之间是否存在冲突风险?我想知

nginx和Node.js都有事件循环来处理请求.我把nginx放在Node.js前面,就像这里推荐的那样

Using Node.js only vs. using Node.js with Apache/Nginx

使用此处显示的设置

Node.js + Nginx – What now?

>两个事件循环如何一起运作?两者之间是否存在冲突风险?我想知道因为Nginx可能无法每秒处理与Node.js一样多的事件,反之亦然.例如,如果Nginx每秒可以处理1000个事件但node.js只能处理500个,那么这不会导致问题吗? (我不知道1000,500是否是合理的数量级,你可以纠正我.)
>将Apache放在Node.js前面怎么样? Apache没有事件循环.只是线程.所以不会把Apache放在Node.js前面打败目的吗?
>在this 2010 talk,Node.js的创建者Ryan Dahl有望完全摆脱nginx / apache /,并使节点直接与互联网对话.你觉得什么时候会成为现实?

最佳答案
> nginx和Node都使用异步和事件驱动的方法.他们之间的沟通或多或少会像这样:

> nginx收到请求
> nginx将请求转发给Node进程,并立即返回等待更多请求
>节点从nginx接收请求
>节点以最小的CPU使用率处理请求,直到某个时候它需要发出一个或多个I / O请求(从数据库读取,写入响应等).此时它会启动所有这些I / O请求并返回以等待更多请求.
>以上可以重复很多次.您可以在非阻塞等待状态下拥有数十万个请求,其中nginx正在等待节点并且Node正在等待I / O.虽然发生这种情况,nginx和Node都准备接受更多的请求!
>最终,Node进程启动的异步I / O将完成,并将调用回调函数.
>如果仍有未完成此请求的I / O请求,则Node再次返回其循环.也可能发生这样的情况:一旦I / O操作完成,节点回调就会消耗这些数据,然后需要发生新的I / O,因此Node可以在返回循环之前启动更多的异步I / O请求.
>最终,Node为特定请求启动的所有I / O操作都将完成,包括那些将响应写回nginx的操作.所以Node结束了这个请求,然后一直回到它的循环.
> nginx接收一个事件,指示响应数据已到达请求,因此它会以非阻塞方式再次获取该数据并将其写回客户端.当响应已写入客户端并且事件将触发时,nginx将结束请求.

您正在询问如果nginx和Node可以处理不同数量的最大连接会发生什么.它们实际上没有最大值,最大值通常来自操作系统配置,例如系统可以一次打开的最大打开句柄数或CPU吞吐量.所以你的问题并不适用.如果系统配置正确且所有进程都受I / O限制,则nginx或Node都不会阻塞.
>如果你可以保证你的Apache永远不会阻塞(即它永远不会达到其最大连接限制),那么将Apache放在Node之前只能运行良好.对于大量连接来说,这很难/不可能实现,因为Apache为每个连接使用单独的进程或线程. nginx和Node规模确实很好,Apache没有.
>前面没有其他服务器的运行节点工作正常,对于小型/中型负载站点应该没问题.将Web服务器放在其前面的原因是首选的是像nginx这样的Web服务器具有Node没有的功能,您需要自己实现.诸如缓存,负载平衡,从同一服务器运行多个应用程序等等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读