windows下node.js進程間傳遞客戶端socket的一些規(guī)律-創(chuàng)新互聯(lián)

最近在update我的一個github項目的時候,想要把原來單一進程的模式改成多進程的模式。

創(chuàng)新互聯(lián)"三網合一"的企業(yè)建站思路。企業(yè)可建設擁有電腦版、微信版、手機版的企業(yè)網站。實現(xiàn)跨屏營銷,產品發(fā)布一步更新,電腦網絡+移動網絡一網打盡,滿足企業(yè)的營銷需求!創(chuàng)新互聯(lián)具備承接各種類型的成都做網站、網站制作項目的能力。經過十多年的努力的開拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質的服務,并獲得了客戶的一致好評。

事情是這樣的,我做了一個HTTP服務器,支持動態(tài)腳本。

在完成了一大堆各種各樣的特性后,遇到了一個腳本超時的問題。

在我的HTTP服務器中,將頁面分成了Template和Activity兩個部分,一個是用做VIEW的,一個是用作MODULE的,也就是類似于ASP啦。

但是,由于NODE.js是單進程的,所以我無法控制Activity中的代碼(為用戶腳本)。

所以,如果Activity中出現(xiàn)死循環(huán),那么整個http服務器就會因此死掉,所以我想做一個檢測腳本超時的特性。

===================================割了==========================

好了,進入正題。

我的想法是這樣的,從主進程來接受socket,然后send給子進程,然后由子進程進行相關的操作(包括域名分析、POST讀取等行為)之后執(zhí)行請求的用戶Activity。這個字進程每隔一段時間向主進程發(fā)送一個alive消息,如果超過了一段時間子進程都沒有向主進程發(fā)送alive消息,那么主進程就kill掉子進程,防止超時的腳本繼續(xù)執(zhí)行,之后新啟一個進程代替剛才被kill掉的子進程。

想法是這樣的,但是遇到了一些問題。

本以為這個事情可以很輕松的完成,但是在主進程發(fā)送socket給子進程后,子進程會綁定一個data事件在傳來的socket上。問題來了,在子進程中,如論如何都無法出發(fā)data事件。

后經實驗,情況是這樣的,socket在被主進程發(fā)送給子進程之前,客戶端發(fā)送來的數(shù)據(jù)就已經發(fā)送給主進程了,所以在子進程中沒有數(shù)據(jù)可讀,自然就如法出發(fā)data事件。

經過修改,我在主進程中讀取一個請求數(shù)據(jù),然后連socket帶第一次讀取的數(shù)據(jù),一起發(fā)送給了子進程。

主進程將socket發(fā)送給子進程后,主進程中的socket好像會被自動關閉。好吧,這對我沒有影響。

簡短的總結:

客戶端socket會一次性發(fā)送一條請求的全部數(shù)據(jù)至主進程,子進程讀取socket前所有內容都已經被發(fā)送給主進程了。

在某個進程發(fā)送socket給其他進程后,在本進程內的socket會被標記為已關閉。

希望我的一點點實踐可以幫到讀到這篇文章的同志。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前題目:windows下node.js進程間傳遞客戶端socket的一些規(guī)律-創(chuàng)新互聯(lián)
鏈接地址:http://bm7419.com/article14/ihige.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供動態(tài)網站、外貿建站、電子商務、微信公眾號、品牌網站設計域名注冊

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務器托管