Swoole server配置選項
在swoole中,一個swoole_server的相關屬性可以通過
$serv->set( $array configs );
函式來配置,這些配置選項使得swoole更加靈活。 示例:
$serv = new swoole_server("0.0.0.0", 9501);
$serv->set(array(
'worker_num' => 8,
'max_request' => 10000,
'max_conn' => 100000,
'dispatch_mode' => 2,
'debug_mode'=> 1,
'daemonize' => false,
));
配置選項以及相關介紹如下:
1.worker_num
描述:指定啟動的worker程式數。
說明:swoole是master-> n * worker的模式,開啟的worker程式數越多,server負載能力越大,但是相應的server佔有的記憶體也會更多。同時,當worker程式數過多時,程式間切換帶來的系統開銷也會更大。因此建議開啟的worker程式數為cpu核數的1-4倍。
示例:
'worker_num' => 8
2.max_request
描述:每個worker程式允許處理的最大任務數。
說明:設定該值後,每個worker程式在處理完max_request個請求後就會自動重啟。設定該值的主要目的是為了防止worker程式處理大量請求後可能引起的記憶體溢位。
示例:
'max_request' => 10000
3.max_conn
描述:伺服器允許維持的最大TCP連線數
說明:設定此引數後,當伺服器已有的連線數達到該值時,新的連線會被拒絕。另外,該引數的值不能超過作業系統ulimit -n的值,同時此值也不宜設定過大,因為swoole_server會一次性申請一大塊記憶體用於存放每一個connection的資訊。
示例:
'max_conn' => 10000
4.ipc_mode
描述:設定程式間的通訊方式。
說明:共有三種通訊方式,引數如下:
- 1 => 使用unix socket通訊
- 2 => 使用訊息佇列通訊
- 3 => 使用訊息佇列通訊,並設定為爭搶模式
示例:
'ipc_mode' => 1
5.dispatch_mode
描述:指定資料包分發策略。
說明:共有三種模式,引數如下:
- 1 => 輪循模式,收到會輪循分配給每一個worker程式
- 2 => 固定模式,根據連線的檔案描述符分配worker。這樣可以保證同一個連線發來的資料只會被同一個worker處理
- 3 => 搶佔模式,主程式會根據Worker的忙閒狀態選擇投遞,只會投遞給處於閒置狀態的Worker
示例:
'dispatch_mode' => 2
6.task_worker_num
描述:伺服器開啟的task程式數。
說明:設定此引數後,伺服器會開啟非同步task功能。此時可以使用task方法投遞非同步任務。
設定此引數後,必須要給swoole_server設定onTask/onFinish兩個回撥函式,否則啟動伺服器會報錯。
示例:
'task_worker_num' => 8
7.task_max_request
描述:每個task程式允許處理的最大任務數。
說明:參考max_request task_worker_num
示例:
'task_max_request' => 10000
8.task_ipc_mode
描述:設定task程式與worker程式之間通訊的方式。
說明:參考ipc_mode
示例:
'task_ipc_mode' => 2
9.daemonize
描述:設定程式進入後臺作為守護程式執行。
說明:長時間執行的伺服器端程式必須啟用此項。如果不啟用守護程式,當ssh終端退出後,程式將被終止執行。啟用守護程式後,標準輸入和輸出會被重定向到 log_file,如果 log_file未設定,則所有輸出會被丟棄。
示例:
'daemonize' => 0
10.log_file
描述:指定日誌檔案路徑
說明:在swoole執行期發生的異常資訊會記錄到這個檔案中。預設會列印到螢幕。注意log_file 不會自動切分檔案,所以需要定期清理此檔案。
示例:
'log_file' => '/data/log/swoole.log'
11.heartbeat_check_interval
描述:設定心跳檢測間隔
說明:此選項表示每隔多久輪循一次,單位為秒。每次檢測時遍歷所有連線,如果某個連線在間隔時間內沒有資料傳送,則強制關閉連線(會有onClose回撥)。
示例:
'heartbeat_check_interval' => 60
12.heartbeat_idle_time
描述:設定某個連線允許的最大閒置時間。
說明:該引數配合heartbeat_check_interval使用。每次遍歷所有連線時,如果某個連線在heartbeat_idle_time時間內沒有資料傳送,則強制關閉連線。預設設定為heartbeat_check_interval * 2。
示例:
'heartbeat_idle_time' => 600
13.open_eof_check
描述:開啟eof檢測功能
說明:與package_eof 配合使用。此選項將檢測客戶端連線發來的資料,當資料包結尾是指定的package_eof 字串時才會將資料包投遞至Worker程式,否則會一直拼接資料包直到快取溢位或超時才會終止。一旦出錯,該連線會被判定為惡意連線,資料包會被丟棄並強制關閉連線。
EOF檢測不會從資料中間查詢eof字串,所以Worker程式可能會同時收到多個資料包,需要在應用層程式碼中自行explode("\r\n", $data) 來拆分資料包
示例:
'open_eof_check' => true
14.package_eof
描述:設定EOF字串
說明:package_eof最大隻允許傳入8個位元組的字串
示例:
'package_eof ' => '/r/n'
15.open_length_check
描述:開啟包長檢測
說明:包長檢測提供了固定包頭+包體這種格式協議的解析,。啟用後,可以保證Worker程式onReceive每次都會收到一個完整的資料包。
示例:
'open_length_check' => true
16.package_length_offset
描述:包頭中第幾個位元組開始存放了長度欄位
說明:配合open_length_check使用,用於指明長度欄位的位置。
示例:
'package_length_offset' => 5
17.package_body_offset
描述:從第幾個位元組開始計算長度。
說明:配合open_length_check使用,用於指明包頭的長度。
示例:
'package_body_offset' => 10
18.package_length_type
描述:指定包長欄位的型別
說明:配合open_length_check使用,指定長度欄位的型別,引數如下:
- 's' => int16_t 機器位元組序
- 'S' => uint16_t 機器位元組序
- 'n' => uint16_t 大端位元組序
- ’N‘ => uint32_t 大端位元組序
- 'L' => uint32_t 機器位元組序
- 'l' => int 機器位元組序
示例:
'package_length_type' => 'N'
19.package_max_length
描述:設定最大資料包尺寸
說明:該值決定了資料包快取區的大小。如果快取的資料超過了該值,則會引發錯誤。具體錯誤處理由開啟的協議解析的型別決定。
示例:
'package_max_length' => 8192
20.open_cpu_affinity
描述:啟用CPU親和性設定
說明:在多核的硬體平臺中,啟用此特性會將swoole的reactor執行緒/worker程式繫結到固定的一個核上。可以避免程式/執行緒的執行時在多個核之間互相切換,提高CPU Cache的命中率。
示例:
'open_cpu_affinity' => true
21.open_tcp_nodelay
描述:啟用open_tcp_nodelay
說明:開啟後TCP連線傳送資料時會無關閉Nagle合併演算法,立即發往客戶端連線。在某些場景下,如http伺服器,可以提升響應速度。
示例:
'open_tcp_nodelay' => true
22.tcp_defer_accept
描述:啟用tcp_defer_accept特性
說明:啟動後,只有一個TCP連線有資料傳送時才會觸發accept。
示例:
'tcp_defer_accept' => true
23.ssl_cert_file和ssl_key_file
描述:設定SSL隧道加密
說明:設定值為一個檔名字串,指定cert證照和key的路徑。
示例:
'ssl_cert_file' => '/config/ssl.crt',
'ssl_key_file' => '/config//ssl.key',
24.open_tcp_keepalive
描述:開啟TCP的KEEP_ALIVE選項
說明:使用TCP內建的keep_alive屬性,用於保證連線不會因為長時閒置而被關閉。
示例:
'open_tcp_keepalive' => true
25.tcp_keepidle
描述:指定探測間隔。
說明:配合open_tcp_keepalive使用,如果某個連線在tcp_keepidle內沒有任何資料來往,則進行探測。
示例:
'tcp_keepidle' => 600
26.tcp_keepinterval
描述:指定探測時的發包間隔
說明:配合open_tcp_keepalive使用
示例:
'tcp_keepinterval' => 60
27.tcp_keepcount
描述:指定探測的嘗試次數
說明:配合open_tcp_keepalive使用,若tcp_keepcount次嘗試後仍無響應,則判定連線已關閉。
示例:
'tcp_keepcount' => 5
28.backlog
描述:指定Listen佇列長度
說明:此引數將決定最多同時有多少個等待accept的連線。
示例:
'backlog' => 128
29.reactor_num
描述:指定Reactor執行緒數
說明:設定主程式內事件處理執行緒的數量,預設會啟用CPU核數相同的數量, 一般設定為CPU核數的1-4倍,最大不得超過CPU核數*4。
示例:
'reactor_num' => 8
30.task_tmpdir
描述:設定task的資料臨時目錄
說明:在swoole_server中,如果投遞的資料超過8192位元組,將啟用臨時檔案來儲存資料。這裡的task_tmpdir就是用來設定臨時檔案儲存的位置。
需要swoole-1.7.7+
示例:
'task_tmpdir' => '/tmp/task/'
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70018475/viewspace-2902536/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Swoole v4.5.7 版本釋出,新增--enable-swoole-json編譯選項JSON編譯
- 管理 MySQL Shell 配置選項MySql
- Swoole 基本例項建立
- linux 靜態地址配置選項Linux
- SQL Server 2005的複製儲存過程選項BYSQLServer儲存過程
- php.ini 核心配置選項說明PHP
- 圖解Eclipse中找不到Server選項的解決方法圖解EclipseServer
- Swoole 原始碼分析——Server 模組之 OpenSSL (下)原始碼Server
- Swoole 原始碼分析——Server 模組之 OpenSSL (上)原始碼Server
- Swoole 原始碼分析——Server模組之OpenSSL (上)原始碼Server
- C# 編譯器選項(Visual Studio配置)C#編譯
- 【Database】可選的資料來源配置項Database
- Qtum如何新增執行選項(或配置檔案)QT
- openEuler 配置VNC ServerVNCServer
- Windows Server安全配置WindowsServer
- Windows server 2012 R2配置NTP ServerWindowsServer
- Swoole 原始碼分析——Server模組之ReactorThread事件迴圈(下)原始碼ServerReactthread事件
- SQL SERVER 2008安全配置SQLServer
- review了一次binlog_format的可選配置項ViewORM
- 觀察下面的選項,選出正確的選項。
- Hyperf 獲取 Swoole\Server 的物件以及函式類的封裝Server物件函式封裝
- workman還是swoole,大家選擇那個呢?
- GRUB配置預設選擇上一次的啟動項
- Sentry 企業級資料安全解決方案 - Relay 配置選項
- 157首選項→想法→隱藏標籤提示, 15首選項, 8快捷鍵,15首選項,5選項,T3選單欄,4919....
- mongodb配置檔案常用配置項MongoDB
- Nuxt常用配置項UX
- 修改Maven配置項Maven
- MySQL多例項配置MySql
- [轉帖]openEuler 22.03 LTS 核心基礎頁大小配置選項討論
- mysql bind_address如何配置多個地址 mysql bind-address選項MySql
- 選項中選擇現在
- jquery選項卡jQuery
- ASP.NET Core - 選項系統之選項驗證ASP.NET
- Windows Server 2012配置MySQL 8.0.20 MGRWindowsServerMySql
- Docker安裝配置Seata-ServerDockerServer
- SQL Server 表分割槽注意事項HXSQLServer
- Tkinter (13) 選項選單部件 OptionMenu