亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Windows下nginx+fastcgi+php的并發(fā)阻塞問(wèn)題

tyheist / 3659人閱讀

摘要:接到一個(gè)需求,兩個(gè)項(xiàng)目之間需要以接口形式通訊。在無(wú)法并發(fā)只能排隊(duì)請(qǐng)求的情況下,第一個(gè)請(qǐng)求依賴于第二個(gè)請(qǐng)求的結(jié)果第二個(gè)請(qǐng)求卻排在后面一直等待第一個(gè)請(qǐng)求執(zhí)行完畢。

接到一個(gè)需求,兩個(gè)項(xiàng)目之間需要以接口形式通訊。我心想curl輕松解決,Easy!
啪嗒啪嗒啪嗒……代碼擼完了,本地測(cè)試一下
瀏覽器一直轉(zhuǎn)圈圈直到超時(shí)……

Why!?

沒有任何錯(cuò)誤提示信息,日志也沒有任何新記錄
POSTMAN調(diào)試了一下剛寫出的接口,沒問(wèn)題啊?
再試一次結(jié)果依舊,重啟環(huán)境后再試也依舊
經(jīng)過(guò)一番測(cè)試,我懷疑是不是我本地環(huán)境無(wú)法并發(fā)?

我訪問(wèn)項(xiàng)目是一個(gè)請(qǐng)求,項(xiàng)目訪問(wèn)另一項(xiàng)目的接口則是第二個(gè)請(qǐng)求。在無(wú)法并發(fā)只能排隊(duì)請(qǐng)求的情況下,第一個(gè)請(qǐng)求依賴于第二個(gè)請(qǐng)求的結(jié)果;第二個(gè)請(qǐng)求卻排在后面一直等待第一個(gè)請(qǐng)求執(zhí)行完畢。這就導(dǎo)致互相依賴產(chǎn)生死循環(huán),也就說(shuō)得通了

怎么解決?

nginx以高并發(fā)聞名,怎么偏偏默認(rèn)不支持并發(fā)?
谷歌找了很多關(guān)于nginx并發(fā)的文章,挨個(gè)兒嘗試設(shè)置,全都以失敗告終
WTF?。窟@是鬧哪樣?該加該改的都弄了,理論上并發(fā)能力爆棚了啊
又是一番嘔心瀝血的谷歌,終于讓我找到了答案——

Windows下PHP_FCGI_CHILDREN無(wú)效
(具體參見PHP BUG#49859)

一般情況下Windows下Nginx的配置都是fastcgi_pass 127.0.0.1:9000;
也就是說(shuō)cgi根本不會(huì)自動(dòng)產(chǎn)生新進(jìn)程去處理并發(fā)請(qǐng)求,只能排隊(duì)
那要怎么辦?既然不能自動(dòng)生成,那就只好手動(dòng)咯

動(dòng)手解決

我準(zhǔn)備額外啟動(dòng)3個(gè)php-cgi去處理并發(fā)請(qǐng)求
首先在nginx.conf中進(jìn)行如下配置:

upstream phpfastcgi_proxy {
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
    server 127.0.0.1:9002;
    server 127.0.0.1:9003;
        # 或更多……
}

再把所有
fastcgi_pass 127.0.0.1:9000;
改為
fastcgi_pass phpfastcgi_proxy;
保存,重啟Nginx。

現(xiàn)在,Nginx會(huì)自動(dòng)將請(qǐng)求轉(zhuǎn)發(fā)給9000-9003其中一個(gè)空閑端口中,接下來(lái)我們還需要啟動(dòng)對(duì)應(yīng)數(shù)量的php-cgi去監(jiān)聽端口

快捷鍵Win+R打開運(yùn)行,輸入cmd進(jìn)入命令行,錄入以下代碼:
E:/php/php-cgi.exe -b 127.0.0.1:9001 -c E:/php/php.ini
(其中路徑部分需要換為你本機(jī)實(shí)際路徑)

回車后看似沒反應(yīng),任務(wù)管理器中會(huì)發(fā)現(xiàn)多了一個(gè)php-cgi進(jìn)程,netstat -a也能夠看到9001端口被監(jiān)聽了
注意不要把命令行關(guān)掉了,而是要繼續(xù)打開一個(gè)新的命令行
此時(shí)你已成功了一次,你還需要繼續(xù)成功兩次才能監(jiān)聽到9002和9003……

額外的3個(gè)php-cgi進(jìn)程啟動(dòng)成功后,你就擁有了一個(gè)并發(fā)數(shù)為4的本地環(huán)境
誒呀媽,不就想整個(gè)并發(fā),真累人……
(后來(lái)還寫了個(gè)小程序?qū)iT用來(lái)自動(dòng)啟動(dòng)3個(gè)php-cgi進(jìn)程,省事兒多了)

后記

并發(fā)問(wèn)題看似是終于解決了

為啥說(shuō)“看似”呢?因?yàn)樵诤髞?lái)的實(shí)際測(cè)試中,自己?jiǎn)?dòng)的php-cgi似乎不穩(wěn)定啊,將近有50%的幾率會(huì)掛掉,導(dǎo)致接口返回內(nèi)容依然為空,很奇怪啊不明覺厲,是不是我哪里配置錯(cuò)了呢?

至此我已經(jīng)在這個(gè)問(wèn)題上折騰了好幾個(gè)小時(shí)了,再折騰下去我老大估計(jì)要打我了。算了,辣雞Windows!我只好啟動(dòng)了塵封已久的Ubuntu虛擬機(jī)……如果廣大讀者有明白這個(gè)問(wèn)題的,還望不吝賜教,謝謝

本文同時(shí)刊登于我的博客 超能小紫,如果喜歡請(qǐng)常來(lái)玩哦

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/39299.html

相關(guān)文章

  • Windowsnginx+fastcgi+php并發(fā)阻塞問(wèn)題

    摘要:接到一個(gè)需求,兩個(gè)項(xiàng)目之間需要以接口形式通訊。在無(wú)法并發(fā)只能排隊(duì)請(qǐng)求的情況下,第一個(gè)請(qǐng)求依賴于第二個(gè)請(qǐng)求的結(jié)果第二個(gè)請(qǐng)求卻排在后面一直等待第一個(gè)請(qǐng)求執(zhí)行完畢。 接到一個(gè)需求,兩個(gè)項(xiàng)目之間需要以接口形式通訊。我心想curl輕松解決,Easy!啪嗒啪嗒啪嗒……代碼擼完了,本地測(cè)試一下瀏覽器一直轉(zhuǎn)圈圈直到超時(shí)…… Why!? 沒有任何錯(cuò)誤提示信息,日志也沒有任何新記錄用POSTMAN調(diào)試了...

    zollero 評(píng)論0 收藏0
  • WindowsPHP服務(wù)nginx不能使用file_get_contents原因

    摘要:然而當(dāng)你嘗試請(qǐng)求這樣的靜態(tài)文件時(shí)卻完全沒有問(wèn)題。打開中的命令,可以看到本地的端口的狀態(tài)為,表示該進(jìn)程在聯(lián)機(jī)處理中。與函數(shù)的原因也相同。這時(shí)需給另一個(gè)分配不同的端口,比如。因此這些人純粹是不學(xué)無(wú)術(shù)的騙子。 注意:本文為轉(zhuǎn)載,原文鏈接:Windows下PHP服務(wù)nginx不能使用file_get_contents/curl/fopen的原因! 一、問(wèn)題說(shuō)明 在Windows環(huán)境下搭建了一...

    yacheng 評(píng)論0 收藏0
  • WindowsPHP服務(wù)nginx不能使用file_get_contents原因

    摘要:然而當(dāng)你嘗試請(qǐng)求這樣的靜態(tài)文件時(shí)卻完全沒有問(wèn)題。打開中的命令,可以看到本地的端口的狀態(tài)為,表示該進(jìn)程在聯(lián)機(jī)處理中。與函數(shù)的原因也相同。這時(shí)需給另一個(gè)分配不同的端口,比如。因此這些人純粹是不學(xué)無(wú)術(shù)的騙子。 注意:本文為轉(zhuǎn)載,原文鏈接:Windows下PHP服務(wù)nginx不能使用file_get_contents/curl/fopen的原因! 一、問(wèn)題說(shuō)明 在Windows環(huán)境下搭建了一...

    娣辯孩 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

tyheist

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<