Swoole server配置選項

願無歲月可回首發表於2022-06-23

在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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章