天天看點

Mpass – PHP做Socket服務的解決方案

一般很少有用php做服務的, 但是如果你的已有業務邏輯都是php實作的, 而現在卻需要基于已有的業務邏輯提供一套socket服務, 怎麼辦?

當然, 解決方法很多, 但最簡單的辦法, 還是直接使用php做socket服務.

而這樣做要解決的問題有很多, 主要要解決的問題有如下幾個:

1. 作為背景服務,需要常駐背景運作, 那麼丁點的記憶體洩露都是不能接受的.

2. 作為背景服務,畸形資料導緻程序異常退出, 也是不可接受的.

3. 作為背景服務, 要能做到graceful restart.

4. 作為背景服務, 對資源的使用必須在可接受的範圍以内.

最近,我就基于php的pcntl擴充實作一個簡單的提供socket服務的架構. 取其名為mpass(multi-processes socket server).

主要結構如下:

Mpass – PHP做Socket服務的解決方案

mpass

就完成了這一套架構.

至于graceful restart, 通過pcntl_signal函數, 在接受到restart/shutdown信号時刻, 做關閉清理動作, 保證不會因為重新開機/關閉而使得正在執行的邏輯出錯.

有類似需求的朋友, 可以借鑒.