2011-07-22 19 views
2

我一直在試圖實現一個Web服務器網關(爲了有趣和教育目的),並且我對FastCGI/SCGI背後的核心體系結構提出了一些關於pre-fork模型的問題。FastCGI/SCGI pre-fork

怎麼辦的FastCGI/SCGI實現在辦理預分叉的情況溝通? AFAIK,網關只有一個套接字連接到FastCGI服務器。通常情況下,有一個父進程接受來自網關的連接,並將工作交給一個預分配的工作人員。

由於連接建立後孩子們分叉,你應該怎麼讓孩子們使用這些插座與網關溝通?

回答

1

我希望我能理解這個問題。

服務器套接字應爲由父進程來創建;當它分叉時,子代會繼承該套接字使其成爲共享資源。那麼,我想,每個孩子都試圖同時接受()連接。

作爲參考,我發現this document(見「接受序列化」)在多個套接字收聽時討論飢餓問題,並this SO discussion上共享插槽

+0

很好找。 SO討論絕對值得一讀。我也喜歡它可以在UNIX和Windows系統上運行。有關促進負載平衡的解決方案,請查看[Nikolai的答案](http://stackoverflow.com/questions/6797222/fastcgi-scgi-pre-fork/7068718#7068718)。 –

1

一個選項是file descriptor passing在UNIX域套接字。 Stevens UNP有basic example

+0

這似乎很簡單,並且允許父進程更容易地執行負載平衡。這是一個特定於UNIX的設計,但是這種類型的設計首先是特定於UNIX的。任何想法在UNIX系統之間如何移植(例如,這是可選的但常見的行爲)? –

+0

AFAIR Windows具有相似的功能,請參閱@ftartaggia答案中的鏈接。 –

相關問題