Mpass – PHP做Socket服務的解決方案
一般很少有用PHP做服務的, 但是如果你的已有業務邏輯都是PHP實現的, 而現在卻需要基於已有的業務邏輯提供一套Socket服務, 怎麼辦?
當然, 解決方法很多, 但最簡單的辦法, 還是直接使用PHP做Socket服務.
而這樣做要解決的問題有很多, 主要要解決的問題有如下幾個:
- 1. 作為後台服務,需要常駐後台運行, 那麼丁點的內存泄露都是不能接受的.
- 2. 作為後台服務,畸形數據導致進程異常退出, 也是不可接受的.
- 3. 作為後台服務, 要能做到graceful restart.
- 4. 作為後台服務, 對資源的使用必須在可接受的範圍以內.
最近,我就基於PHP的pcntl擴展實現一個簡單的提供Socket服務的框架. 取其名為Mpass(Multi-Processes Socket Server).
主要結構如下:
我之前的文章PHP CLI模式下的多進程應用介紹過在PHP做服務的時候如何避免內存泄露, 所以基於此, 再加上PHP5以後的stream_socket_*係列API, 就完成了這一套框架.
至於Graceful restart, 通過pcntl_signal函數, 在接受到restart/shutdown信號時刻, 做關閉清理動作, 保證不會因為重啟/關閉而使得正在執行的邏輯出錯.
有類似需求的朋友, 可以借鑒.
項目地址&下載地址 : Mpass
最後更新:2017-04-03 22:15:29