最近在update我的一個github項目的時候,想要把原來單一進程的模式改成多進程的模式。
事情是這樣的,我做了一個HTTP服務(wù)器,支持動態(tài)腳本。
在完成了一大堆各種各樣的特性后,遇到了一個腳本超時的問題。
在我的HTTP服務(wù)器中,將頁面分成了Template和Activity兩個部分,一個是用做VIEW的,一個是用作MODULE的,也就是類似于ASP啦。
但是,由于NODE.js是單進程的,所以我無法控制Activity中的代碼(為用戶腳本)。
所以,如果Activity中出現(xiàn)死循環(huán),那么整個http服務(wù)器就會因此死掉,所以我想做一個檢測腳本超時的特性。
===================================割了==========================
好了,進入正題。
我的想法是這樣的,從主進程來接受socket,然后send給子進程,然后由子進程進行相關(guān)的操作(包括域名分析、POST讀取等行為)之后執(zhí)行請求的用戶Activity。這個字進程每隔一段時間向主進程發(fā)送一個alive消息,如果超過了一段時間子進程都沒有向主進程發(fā)送alive消息,那么主進程就kill掉子進程,防止超時的腳本繼續(xù)執(zhí)行,之后新啟一個進程代替剛才被kill掉的子進程。
想法是這樣的,但是遇到了一些問題。
本以為這個事情可以很輕松的完成,但是在主進程發(fā)送socket給子進程后,子進程會綁定一個data事件在傳來的socket上。問題來了,在子進程中,如論如何都無法出發(fā)data事件。
后經(jīng)實驗,情況是這樣的,socket在被主進程發(fā)送給子進程之前,客戶端發(fā)送來的數(shù)據(jù)就已經(jīng)發(fā)送給主進程了,所以在子進程中沒有數(shù)據(jù)可讀,自然就如法出發(fā)data事件。
經(jīng)過修改,我在主進程中讀取一個請求數(shù)據(jù),然后連socket帶第一次讀取的數(shù)據(jù),一起發(fā)送給了子進程。
主進程將socket發(fā)送給子進程后,主進程中的socket好像會被自動關(guān)閉。好吧,這對我沒有影響。
簡短的總結(jié):
客戶端socket會一次性發(fā)送一條請求的全部數(shù)據(jù)至主進程,子進程讀取socket前所有內(nèi)容都已經(jīng)被發(fā)送給主進程了。
在某個進程發(fā)送socket給其他進程后,在本進程內(nèi)的socket會被標(biāo)記為已關(guān)閉。
希望我的一點點實踐可以幫到讀到這篇文章的同志。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前題目:windows下node.js進程間傳遞客戶端socket的一些規(guī)律-創(chuàng)新互聯(lián)
鏈接地址:http://aaarwkj.com/article14/ihige.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、外貿(mào)建站、電子商務(wù)、微信公眾號、品牌網(wǎng)站設(shè)計、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容