閱讀967 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

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

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

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


  1. 1. 作為後台服務,需要常駐後台運行, 那麼丁點的內存泄露都是不能接受的.
  2. 2. 作為後台服務,畸形數據導致進程異常退出, 也是不可接受的.
  3. 3. 作為後台服務, 要能做到graceful restart.
  4. 4. 作為後台服務, 對資源的使用必須在可接受的範圍以內.

最近,我就基於PHP的pcntl擴展實現一個簡單的提供Socket服務的框架. 取其名為Mpass(Multi-Processes Socket Server).

主要結構如下:

Mpass

我之前的文章PHP CLI模式下的多進程應用介紹過在PHP做服務的時候如何避免內存泄露, 所以基於此, 再加上PHP5以後的stream_socket_*係列API, 就完成了這一套框架.

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

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

項目地址&下載地址 : Mpass

最後更新:2017-04-03 22:15:29

  上一篇:go 馬雲,為什麼不戴紅帽
  下一篇:go PHP CLI模式下的多進程應用