2013-10-02 9 views
5

Należy wziąć pod uwagę następującą sytuację: wdrażasz aplikację, która może obsłużyć 1 kw./Sek. Co by się stało, gdy wyślę 10 żądań w ciągu 1 sekundy? Napisałem prostą aplikację, aby przetestować to: https://github.com/amezhenin/nginx_slow_upstream. Ten test pokazuje, że Twoje żądania zostaną wysłane _in_exact_same_order_, zostały wysłane.Czy Nginx ma oddzielny mechanizm kolejkowania dla żądań?

Na razie wygląda na to, że Nginx ma jakąś kolejkę dla żądań, ale mój kolega (administrator) powiedział, że nie ma żadnych kolejek w Nginx. Napisałem więc kolejne pytanie o epoll tutaj: Does epoll preserve the order in which fd's was registered?. Z tej dyskusji doszedłem do wniosku, że epoll zachowuje kolejność żądań.

Mam dwa pytania:

1) Czy istnieją jakieś błędy w rozumowaniu/kodu powyżej?

2) Czy Nginx ma jakiś rodzaj kolejki dla żądań na górze epoll? Lub Nginx używa czystej funkcji epoll?

Dziękuję i przepraszam za mój angielski :)

Odpowiedz

3

Nginx nie ma jej własną kolejkę, zamiast pcha wszystkie żądania do serwera aplikacji, które mają listen Gniazdo:

#include <sys/types.h> 
#include <sys/socket.h> 

int listen(int sockfd, int backlog); 

(http://linux.die.net/man/2/listen) 

backlog definiuje długość tej kolejki. Możesz przeczytać pełną rozmowę here.

Powiązane problemy