Mpass PHP做Socket服務的解決方案

2021-05-23 11:15:03 字數 688 閱讀 3500

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

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

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

作為後台服務,需要常駐後台執行, 那麼丁點的記憶體洩露都是不能接受的.

作為後台服務,畸形資料導致程序異常退出, 也是不可接受的.

作為後台服務, 要能做到graceful restart.

作為後台服務, 對資源的使用必須在可接受的範圍以內.

最近,我就基於php的pcntl擴充套件實現乙個簡單的提供socket服務的框架. 取其名為mpass(multi-processes socket server).

主要結構如下:

mpass

我之前的文章php cli模式下的多程序應用介紹過在php做服務的時候如何避免記憶體洩露, 所以基於此, 再加上php5以後的stream_socket_*系列api, 就完成了這一套框架.

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

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

做自己的Socket網路通訊框架 實現篇

關於框架的設計思想在前面一篇已經做了描述,在這裡著重介紹一下關鍵類的實現。niosocketacceptor niosocketconnector兩個類的功能比較簡單,看一眼就知道是什麼意思,filter定義了過濾器基礎方法,主要包括以下的方法 init destroy和getorder三個方法。後...

非同步SOCKET與同步SOCKET

windows 套接字在兩種模式下執行 i o操作,阻塞和非阻塞。在阻塞模式下,在 i o操作完成前,執行操作的 winsock 函式會一直等待下去,不會立即返回程式 將控制權交還給程式 而在非阻塞模式下,winsock 函式無論如何都會立即返回。windows sockets 的非同步選擇函式 w...

Socket初學認識 Socket模型

socket實際上代表的是網路通訊的乙個端點,通過socket,使用者所開發的應用程式可以通過網路和其他socket應用程式通訊。socket是網路的i o基礎,也可以將它與unix的管道或者檔案模擬。應用程式需要與遠端主機連線時,應建立乙個socket,之後通過socket與遠端應用程式建立連線,...