Node.js事件循环 – nginx / apache

前端之家收集整理的这篇文章主要介绍了Node.js事件循环 – nginx / apache前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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没有的功能,您需要自己实现.诸如缓存,负载平衡,从同一服务器运行多个应用程序等等.

猜你在找的Nginx相关文章