重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
最近在update我的一個(gè)github項(xiàng)目的時(shí)候,想要把原來(lái)單一進(jìn)程的模式改成多進(jìn)程的模式。
超過(guò)十多年行業(yè)經(jīng)驗(yàn),技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營(yíng)模式,全靠網(wǎng)絡(luò)和口碑獲得客戶(hù),為自己降低成本,也就是為客戶(hù)降低成本。到目前業(yè)務(wù)范圍包括了:成都網(wǎng)站制作、網(wǎng)站建設(shè),成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,微信小程序,微信開(kāi)發(fā),app軟件開(kāi)發(fā)公司,同時(shí)也可以讓客戶(hù)的網(wǎng)站和網(wǎng)絡(luò)營(yíng)銷(xiāo)和我們一樣獲得訂單和生意!
事情是這樣的,我做了一個(gè)HTTP服務(wù)器,支持動(dòng)態(tài)腳本。
在完成了一大堆各種各樣的特性后,遇到了一個(gè)腳本超時(shí)的問(wèn)題。
在我的HTTP服務(wù)器中,將頁(yè)面分成了Template和Activity兩個(gè)部分,一個(gè)是用做VIEW的,一個(gè)是用作MODULE的,也就是類(lèi)似于ASP啦。
但是,由于NODE.js是單進(jìn)程的,所以我無(wú)法控制Activity中的代碼(為用戶(hù)腳本)。
所以,如果Activity中出現(xiàn)死循環(huán),那么整個(gè)http服務(wù)器就會(huì)因此死掉,所以我想做一個(gè)檢測(cè)腳本超時(shí)的特性。
===================================割了==========================
好了,進(jìn)入正題。
我的想法是這樣的,從主進(jìn)程來(lái)接受socket,然后send給子進(jìn)程,然后由子進(jìn)程進(jìn)行相關(guān)的操作(包括域名分析、POST讀取等行為)之后執(zhí)行請(qǐng)求的用戶(hù)Activity。這個(gè)字進(jìn)程每隔一段時(shí)間向主進(jìn)程發(fā)送一個(gè)alive消息,如果超過(guò)了一段時(shí)間子進(jìn)程都沒(méi)有向主進(jìn)程發(fā)送alive消息,那么主進(jìn)程就kill掉子進(jìn)程,防止超時(shí)的腳本繼續(xù)執(zhí)行,之后新啟一個(gè)進(jìn)程代替剛才被kill掉的子進(jìn)程。
想法是這樣的,但是遇到了一些問(wèn)題。
本以為這個(gè)事情可以很輕松的完成,但是在主進(jìn)程發(fā)送socket給子進(jìn)程后,子進(jìn)程會(huì)綁定一個(gè)data事件在傳來(lái)的socket上。問(wèn)題來(lái)了,在子進(jìn)程中,如論如何都無(wú)法出發(fā)data事件。
后經(jīng)實(shí)驗(yàn),情況是這樣的,socket在被主進(jìn)程發(fā)送給子進(jìn)程之前,客戶(hù)端發(fā)送來(lái)的數(shù)據(jù)就已經(jīng)發(fā)送給主進(jìn)程了,所以在子進(jìn)程中沒(méi)有數(shù)據(jù)可讀,自然就如法出發(fā)data事件。
經(jīng)過(guò)修改,我在主進(jìn)程中讀取一個(gè)請(qǐng)求數(shù)據(jù),然后連socket帶第一次讀取的數(shù)據(jù),一起發(fā)送給了子進(jìn)程。
主進(jìn)程將socket發(fā)送給子進(jìn)程后,主進(jìn)程中的socket好像會(huì)被自動(dòng)關(guān)閉。好吧,這對(duì)我沒(méi)有影響。
簡(jiǎn)短的總結(jié):
客戶(hù)端socket會(huì)一次性發(fā)送一條請(qǐng)求的全部數(shù)據(jù)至主進(jìn)程,子進(jìn)程讀取socket前所有內(nèi)容都已經(jīng)被發(fā)送給主進(jìn)程了。
在某個(gè)進(jìn)程發(fā)送socket給其他進(jìn)程后,在本進(jìn)程內(nèi)的socket會(huì)被標(biāo)記為已關(guān)閉。
希望我的一點(diǎn)點(diǎn)實(shí)踐可以幫到讀到這篇文章的同志。