请考虑以下情况:您正在部署可以提供1 req./sec的应用程序。如果我在1秒内发送10个请求会怎么样?我写了一个简单的应用来测试:https://github.com/amezhenin/nginx_slow_upstream。 此测试显示您的请求将被发送_in_exact_same_order_。
目前,这看起来像Nginx有一些请求队列,但我的同事(管理员)说Nginx中没有任何队列。所以我在这里写了另一个关于epoll的问题:Does epoll preserve the order in which fd's was registered?。从那次讨论中我发现epoll确实保留了请求的顺序。
我有两个问题:
1)上面的推理/代码是否有错误?
2)Nginx是否在epoll之上有一些请求队列?或者Nginx使用纯epoll功能?
谢谢你,对不起我的英文:)
答案 0 :(得分:5)
Nginx没有自己的队列,而是将所有请求推送到具有listen
套接字的应用服务器:
#include <sys/types.h>
#include <sys/socket.h>
int listen(int sockfd, int backlog);
(http://linux.die.net/man/2/listen)
backlog
定义此队列的长度。您可以阅读完整的对话here。