PHP編寫daemon process 例項詳解

2022-09-29 16:27:16 字數 1644 閱讀 6231

php編寫daemon process

今天下午在segmentfault.com看到乙個提問,提問標題是「php怎麼做服務化」,其中問道php是不是只能以web方式呼叫。其實很多人對php的使用場景都有誤解,認為php只能用於編寫web指令碼,實際上,從php4開始,php的使用場景早已不限於處理web請求。 從php的架構體系來說,php分為三個層次:sapi、php core和zend engine。php core本身和web沒有任何耦合,php通過sapi與其它應用程式通訊,例如mod_php就是為apache編寫的sapi實現,同樣,fpm是乙個基於f協議的sapi實現程式設計客棧,這些sapi都是與web server配合用於處理web請求的。但是也有許多sapi與web無關,例如cli sapi可以使得在命令列環境下直接執行php,embed sapi可以將php嵌入其它語言(如lua)那樣。這裡我並不打算詳細討論php的架構體系和sapi的話題,只是說明從架構體系角度目前的php早已被設計為支援各種環境,而非為web獨有。 除了架構體系的支援外,php豐富的擴充套件模組也為php在不同環境發揮作用提供了後盾,例如本文要提到的pcntl模組和posix模組配合可以實現基本的程序管理、訊號處理等作業系統級別的功能,而sockets模組可以使php具有socket通訊的能力。因此php完全可以用於編寫類似於shell或perl常做的工具性指令碼,甚至是具有server性質的daemon process。 為了展示php如何編寫daemon server,我用php編寫了乙個簡單的http server,這個server以daemon process的形式執行。當然,為了把重點放在如何使用php編寫daemon,我沒有為這個http server實現具體業務邏輯,但它可以監聽指定埠,接受http請求並返回給客戶端一條固定的文字,整個過程通過socket實現,全部由php編寫而成。

**例項

下面是這個程式的完整**:

//as a demo, this function just send "php http server" to 程式設計客棧client.

這裡我假設各位對unix環境程式設計都比較了解,所以不做太多細節的解釋,只梳理一下。簡單來看,這個程式主要由兩個部分組成,handle_http_request函式負責處理http請求,其編寫方法與用c編寫的tcp server類似:建立socket、繫結、監聽,然後通過乙個迴圈處理每個connect過來的客戶端,一旦accept到乙個連線...

本文標題: php編寫daemon process 例項詳解

本文位址:

php 編寫mysql php mysql 編寫

表單資料插入 表單資料插入 if get act insert error reporting 0 禁止錯誤輸出 mysql query set names utf 8 con mysql connect localhost 3306 root 1234 建立資料庫連 mysql select db...

C 編寫PHP擴充套件

進入php5 ext目錄,用ext skel extname modulename生成乙個模板。進入php5 ext modulename 開啟config.m4,改寫成 php arg enable picen,whether to enable picen support,enable pice...

編寫PHP擴充套件補遺

關於config.m4的用法 幾個函式的介紹,php add library x,modulename shared libadd php add include path x是需要附加編譯的條件,即 l x,path是標頭檔案之類的路徑。如果有多個檔案需要編譯,可以這樣修改php new exte...