溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

windows下node.js進程間傳遞客戶端socket的一些規律

發布時間:2020-07-11 17:17:06 來源:網絡 閱讀:559 作者:malpower 欄目:web開發

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

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

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

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

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

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

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



好了,進入正題。

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



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

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

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

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

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





簡短的總結:

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

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





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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女