基于epoll的nginx
有了epoll,理論上1個(gè)進(jìn)程就可以無(wú)限數(shù)量的連接,而且無(wú)需輪詢,真正解決了c10k的問(wèn)題。? ? ? (推薦學(xué)習(xí): swoole視頻教程)
Nginx是基于epoll的,異步非阻塞的服務(wù)器程序。自然,Nginx能夠輕松處理百萬(wàn)級(jí)的并發(fā)連接,也就無(wú)可厚非了。
swoole如何處理高并發(fā)
①Reactor模型介紹
IO復(fù)用異步非阻塞程序使用經(jīng)典的Reactor模型,Reactor顧名思義就是反應(yīng)堆的意思,它本身不處理任何數(shù)據(jù)收發(fā)。只是可以監(jiān)視一個(gè)socket(也可以是管道、eventfd、信號(hào))句柄的事件變化。
注:什么是句柄?句柄英文為handler,可以形象的比喻為鍋柄、勺柄。也就是資源的唯一標(biāo)識(shí)符、資源的ID。通過(guò)這個(gè)ID可以操作資源。
Reactor只是一個(gè)事件發(fā)生器,實(shí)際對(duì)socket句柄的操作,如connect/accept、send/recv、close是在callback中完成的。
因?yàn)閞eactor基于epoll,所以每個(gè)reactor可以處理無(wú)數(shù)個(gè)連接請(qǐng)求。?如此,swoole就輕松的處理了高并發(fā)。
nginx配置:
server?{ ????listen??80; ????server_name??www.swoole.com; ????root??/data/wwwroot/www.swoole.com; ????location?/?{ ????????if?(!-e?$request_filename){ ????????????proxy_pass?http://127.0.0.1:9501; ????????} ????} }
9501就是swoole服務(wù)器監(jiān)聽(tīng)的地址。root設(shè)置為靜態(tài)文件的目錄。當(dāng)請(qǐng)求靜態(tài)文件是由Nginx直接處理,當(dāng)請(qǐng)求的文件不存在時(shí),發(fā)送給Swoole服務(wù)器,來(lái)進(jìn)行處理。