# 特性
### 1、純PHP開發
使用WorkerMan開發的應用程序不依賴php-fpm、apache、nginx這些容器就可以獨立運行。 這使得PHP開發者開發、部署、調試應用程序非常方便。
### 2、支持PHP多進程
為了充分發揮服務器多CPU的性能,WorkerMan默認支持多進程多任務。WorkerMan開啟一個主進程和多個子進程對外提供服務, 主進程負責監控子進程,子進程獨自監聽網絡連接并接收發送及處理數據,由于進程模型簡單,使得WorkerMan更加穩定,更加高效。
### 3、支持TCP、UDP
WorkerMan支持TCP和UDP兩種傳輸層協議,只需要更改一個屬性便可以更換傳輸層協議,業務代碼無需改動。
### 4、支持長連接
很多時候需要PHP應用程序要與客戶端保持長連接,比如聊天室、游戲等,但是傳統的PHP容器(apache、nginx、php-fpm)很難做到這一點。 使用WorkerMan,只要服務端業務不主動調用關閉連接接口,便可以使用PHP長連接。WorkerMan單個進程可以支持上萬的并發連接,多進程則支持數十萬的甚至百萬并發連接。
### 5、支持各種應用層協議
WorkerMan接口上支持各種應用層協議,包括自定義協議。在WorkerMan中更換協議同樣非常簡單,同樣只是配置一個字段,協議自動切換,業務代碼零改動,甚至可以開啟多個不同協議的端口,滿足不同的客戶端需求。
### 6、支持高并發
WorkerMan支持Libevent事件輪詢庫(需要安裝Libevent擴展), 使用Libevent在高并發時性能非常卓越,如果沒有安裝Libevent則使用PHP內置的Select相關系統調用,性能也同樣非常強悍。
### 7、支持服務平滑重啟
當需要重啟服務時(例如發布版本),我們不希望正在處理用戶請求的進程被立刻終止,更不希望重啟的那一刻導致客戶端通訊失敗。WorkerMan提供了平滑重啟功能,能夠保障服務平滑升級,不影響客戶端的使用。
### 8、支持文件更新檢測及自動加載
在開發過程中,我們希望在我們改動代碼后能夠立刻生效,以便查看結果。WorkerMan提供了[文件檢測及自動加載組件](315203),只要文件有更新,WorkerMan會自動運行reload,以便加載新的文件,使之生效。
### 9、支持以指定用戶運行子進程
因為子進程是實際處理用戶請求的進程,為了安全考慮,子進程不能有太高的權限,所以WorkerMan支持設置子運行進程運行的用戶,使你的服務器更加安全。
### 10、支持對象或者資源永久保持
WorkerMan在運行過程中只會載入解析一次PHP文件,然后便常駐內存,這使得類及函數聲明、PHP執行環境、符號表等不會重復創建銷毀,這與Web容器下運行的PHP機制是完全不同的。在WorkerMan中,一個進程生命周期內靜態成員或者全局變量在不主動銷毀的情況下是永久保持的,也就是將對象或者鏈接等資源放到全局變量或者類靜態成員中則當前進程的整個生命周期內的所有請求都可以復用。例如只要單個進程內初始化一次數據庫連接,則以后這個進程的所有請求都可以復用這個數據庫連接,避免了頻繁連接數據庫過程中TCP三次握手、 數據庫權限驗證、斷開連接時TCP四次握手的過程,極大的提高了應用程序效率。
### 11、高性能
由于php文件從磁盤讀取解析一次后便會常駐內存,下次使用時直接使用內存中的opcode, 極大的減少了磁盤IO及PHP中請求初始化、創建執行環境、詞法解析、語法解析、編譯opcode、請求關閉等諸多耗時過程, 并且不依賴nginx、apache等容器,少了nginx等容器與PHP通信的開銷,最主要的是資源可以永久保持,不必每次初始化數據庫連接等等, 所以使用WorkerMan開發應用程序,性能非常高。
### 12、支持HHVM
支持在HHVM虛擬機上運行,可成倍提升PHP性能。尤其是在cpu密集運算業務中,性能非常優異。通過實際壓力測試對比,在沒有負載業務的情況下,WorkerMan在HHVM下運行比在Zend PHP5.6運行網絡吞吐量提高了30-80%左右
### 13、支持分布式部署
### 14、支持守護進程化
### 15、支持多端口監聽
### 16、支持標準輸入輸出重定向
- 序言
- 原理
- 開發必讀
- 入門指引
- 特性
- 簡單的開發示例
- 安裝
- 環境要求
- 下載安裝
- 啟動停止
- 開發流程
- 開發前必讀
- 目錄結構
- 開發規范
- 基本流程
- 通訊協議
- 通訊協議作用
- 定制通訊協議
- 一些例子
- Worker類
- 構造函數
- 屬性
- id
- count
- name
- protocol
- transport
- reusePort
- connections
- stdoutFile
- pidFile
- logFile
- user
- reloadable
- daemonize
- globalEvent
- 回調屬性
- onWorkerStart
- onWorkerReload
- onConnect
- onMessage
- onClose
- onBufferFull
- onBufferDrain
- onError
- 接口
- runAll
- stopAll
- listen
- TcpConnection類
- 屬性
- id
- protocol
- worker
- maxSendBufferSize
- defaultMaxSendBufferSize
- maxPackageSize
- 回調屬性
- onMessage
- onClose
- onBufferFull
- onBufferDrain
- onError
- 接口
- send
- getRemoteIp
- getRemotePort
- close
- destroy
- pauseRecv
- resumeRecv
- pipe
- AsyncTcpConnection類
- 構造函數
- connect
- reconnect
- transport
- Timer定時器類
- add
- del
- 定時器注意事項
- WebServer
- 調試
- 基本調試
- 查看運行狀態
- 網絡抓包
- 跟蹤系統調用
- 常用組件
- GlobalData數據共享組件
- GlobalDataServer
- GlobalDataClient
- Channel分布式通訊組件
- ChannelServer
- channelClient
- 例子-集群推送
- 例子-分組發送
- FileMonitor文件監控組件
- MySQL組件
- workerman/mysql
- swoole/mysql(異步)
- redis組件
- swoole/redis
- 異步http組件
- swoole/http-client
- 異步消息隊列組件
- react/zmq
- react/stomp
- 異步dns組件
- swoole/dns
- 常見問題
- 心跳
- 客戶端鏈接失敗原因
- 是否支持多線程
- 與其它框架整合
- 運行多個workerman
- 支持哪些協議
- 如何設置進程數
- 查看客戶端連接數
- 對象和資源的持久化
- 例子無法工作
- 啟動失敗
- 停止失敗
- 支持多少并發
- 更改代碼不生效
- 向指定客戶端發送數據
- 如何主動推送消息
- 在其它項目中推送
- 如何實現異步任務
- status里send_fail的原因
- Windows下開發Linux下部署
- 是否支持socket.io
- 終端關閉導致workerman關閉
- 與nginx apache的關系
- 禁用函數檢查
- 平滑重啟原理
- 為Flash開843端口
- 如何廣播數據
- 如何建立udp服務
- 監聽ipv6
- 關閉未認證的鏈接
- 傳輸加密-ssl/tsl
- 創建wss服務
- 創建https服務
- workerman作為客戶端
- 作為ws/wss客戶端
- PHP的幾種回調寫法
- 附錄
- Linux內核調優
- 壓力測試
- 安裝擴展
- websocket協議
- ws協議
- text協議
- frame協議
- 不支持的函數/特性
- 版權信息