一般很少有用php做服務的, 但是如果你的已有業務邏輯都是php實作的, 而現在卻需要基于已有的業務邏輯提供一套socket服務, 怎麼辦?
當然, 解決方法很多, 但最簡單的辦法, 還是直接使用php做socket服務.
而這樣做要解決的問題有很多, 主要要解決的問題有如下幾個:
1. 作為背景服務,需要常駐背景運作, 那麼丁點的記憶體洩露都是不能接受的.
2. 作為背景服務,畸形資料導緻程序異常退出, 也是不可接受的.
3. 作為背景服務, 要能做到graceful restart.
4. 作為背景服務, 對資源的使用必須在可接受的範圍以内.
最近,我就基于php的pcntl擴充實作一個簡單的提供socket服務的架構. 取其名為mpass(multi-processes socket server).
主要結構如下:
mpass
就完成了這一套架構.
至于graceful restart, 通過pcntl_signal函數, 在接受到restart/shutdown信号時刻, 做關閉清理動作, 保證不會因為重新開機/關閉而使得正在執行的邏輯出錯.
有類似需求的朋友, 可以借鑒.