Swoole server配置選項

2019-08-14 19:13 更新

在swoole中,一個swoole_server的相關屬性可以通過

$serv->set( $array configs );

函數(shù)來配置,這些配置選項使得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進程數(shù)。
說明:swoole是master-> n * worker的模式,開啟的worker進程數(shù)越多,server負載能力越大,但是相應的server占有的內(nèi)存也會更多。同時,當worker進程數(shù)過多時,進程間切換帶來的系統(tǒng)開銷也會更大。因此建議開啟的worker進程數(shù)為cpu核數(shù)的1-4倍。
示例:

'worker_num' => 8

2.max_request

描述:每個worker進程允許處理的最大任務數(shù)。
說明:設置該值后,每個worker進程在處理完max_request個請求后就會自動重啟。設置該值的主要目的是為了防止worker進程處理大量請求后可能引起的內(nèi)存溢出。
示例:

'max_request' => 10000

3.max_conn

描述:服務器允許維持的最大TCP連接數(shù)
說明:設置此參數(shù)后,當服務器已有的連接數(shù)達到該值時,新的連接會被拒絕。另外,該參數(shù)的值不能超過操作系統(tǒng)ulimit -n的值,同時此值也不宜設置過大,因為swoole_server會一次性申請一大塊內(nèi)存用于存放每一個connection的信息。
示例:

'max_conn' => 10000

4.ipc_mode

描述:設置進程間的通信方式。
說明:共有三種通信方式,參數(shù)如下:

  • 1 => 使用unix socket通信
  • 2 => 使用消息隊列通信
  • 3 => 使用消息隊列通信,并設置為爭搶模式

示例:

'ipc_mode' => 1

5.dispatch_mode

描述:指定數(shù)據(jù)包分發(fā)策略。
說明:共有三種模式,參數(shù)如下:

  • 1 => 輪循模式,收到會輪循分配給每一個worker進程
  • 2 => 固定模式,根據(jù)連接的文件描述符分配worker。這樣可以保證同一個連接發(fā)來的數(shù)據(jù)只會被同一個worker處理
  • 3 => 搶占模式,主進程會根據(jù)Worker的忙閑狀態(tài)選擇投遞,只會投遞給處于閑置狀態(tài)的Worker

示例:

'dispatch_mode' => 2

6.task_worker_num

描述:服務器開啟的task進程數(shù)。
說明:設置此參數(shù)后,服務器會開啟異步task功能。此時可以使用task方法投遞異步任務。

設置此參數(shù)后,必須要給swoole_server設置onTask/onFinish兩個回調(diào)函數(shù),否則啟動服務器會報錯。

示例:

'task_worker_num' => 8

7.task_max_request

描述:每個task進程允許處理的最大任務數(shù)。
說明:參考max_request task_worker_num
示例:

'task_max_request' => 10000

8.task_ipc_mode

描述:設置task進程與worker進程之間通信的方式。
說明:參考ipc_mode
示例:

'task_ipc_mode' => 2

9.daemonize

描述:設置程序進入后臺作為守護進程運行。
說明:長時間運行的服務器端程序必須啟用此項。如果不啟用守護進程,當ssh終端退出后,程序?qū)⒈唤K止運行。啟用守護進程后,標準輸入和輸出會被重定向到 log_file,如果 log_file未設置,則所有輸出會被丟棄。
示例:

'daemonize' => 0

10.log_file

描述:指定日志文件路徑
說明:在swoole運行期發(fā)生的異常信息會記錄到這個文件中。默認會打印到屏幕。注意log_file 不會自動切分文件,所以需要定期清理此文件。
示例:

'log_file' => '/data/log/swoole.log'

11.heartbeat_check_interval

描述:設置心跳檢測間隔
說明:此選項表示每隔多久輪循一次,單位為秒。每次檢測時遍歷所有連接,如果某個連接在間隔時間內(nèi)沒有數(shù)據(jù)發(fā)送,則強制關閉連接(會有onClose回調(diào))。
示例:

'heartbeat_check_interval' => 60

12.heartbeat_idle_time

描述:設置某個連接允許的最大閑置時間。
說明:該參數(shù)配合heartbeat_check_interval使用。每次遍歷所有連接時,如果某個連接在heartbeat_idle_time時間內(nèi)沒有數(shù)據(jù)發(fā)送,則強制關閉連接。默認設置為heartbeat_check_interval * 2。
示例:

'heartbeat_idle_time' => 600

13.open_eof_check

描述:打開eof檢測功能
說明:與package_eof 配合使用。此選項將檢測客戶端連接發(fā)來的數(shù)據(jù),當數(shù)據(jù)包結(jié)尾是指定的package_eof 字符串時才會將數(shù)據(jù)包投遞至Worker進程,否則會一直拼接數(shù)據(jù)包直到緩存溢出或超時才會終止。一旦出錯,該連接會被判定為惡意連接,數(shù)據(jù)包會被丟棄并強制關閉連接。

EOF檢測不會從數(shù)據(jù)中間查找eof字符串,所以Worker進程可能會同時收到多個數(shù)據(jù)包,需要在應用層代碼中自行explode("\r\n", $data) 來拆分數(shù)據(jù)包

示例:

'open_eof_check' => true

14.package_eof

描述:設置EOF字符串
說明:package_eof最大只允許傳入8個字節(jié)的字符串
示例:

'package_eof ' => '/r/n'

15.open_length_check

描述:打開包長檢測
說明:包長檢測提供了固定包頭+包體這種格式協(xié)議的解析,。啟用后,可以保證Worker進程onReceive每次都會收到一個完整的數(shù)據(jù)包。
示例:

'open_length_check' => true

16.package_length_offset

描述:包頭中第幾個字節(jié)開始存放了長度字段
說明:配合open_length_check使用,用于指明長度字段的位置。
示例:

'package_length_offset' => 5

17.package_body_offset

描述:從第幾個字節(jié)開始計算長度。
說明:配合open_length_check使用,用于指明包頭的長度。
示例:

'package_body_offset' => 10

18.package_length_type

描述:指定包長字段的類型
說明:配合open_length_check使用,指定長度字段的類型,參數(shù)如下:

  • 's' => int16_t 機器字節(jié)序
  • 'S' => uint16_t 機器字節(jié)序
  • 'n' => uint16_t 大端字節(jié)序
  • ’N‘ => uint32_t 大端字節(jié)序
  • 'L' => uint32_t 機器字節(jié)序
  • 'l' => int 機器字節(jié)序

示例:

'package_length_type' => 'N'

19.package_max_length

描述:設置最大數(shù)據(jù)包尺寸
說明:該值決定了數(shù)據(jù)包緩存區(qū)的大小。如果緩存的數(shù)據(jù)超過了該值,則會引發(fā)錯誤。具體錯誤處理由開啟的協(xié)議解析的類型決定。
示例:

'package_max_length' => 8192

20.open_cpu_affinity

描述:啟用CPU親和性設置
說明:在多核的硬件平臺中,啟用此特性會將swoole的reactor線程/worker進程綁定到固定的一個核上??梢员苊膺M程/線程的運行時在多個核之間互相切換,提高CPU Cache的命中率。
示例:

'open_cpu_affinity' => true

21.open_tcp_nodelay

描述:啟用open_tcp_nodelay
說明:開啟后TCP連接發(fā)送數(shù)據(jù)時會無關閉Nagle合并算法,立即發(fā)往客戶端連接。在某些場景下,如http服務器,可以提升響應速度。
示例:

'open_tcp_nodelay' => true

22.tcp_defer_accept

描述:啟用tcp_defer_accept特性
說明:啟動后,只有一個TCP連接有數(shù)據(jù)發(fā)送時才會觸發(fā)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內(nèi)置的keep_alive屬性,用于保證連接不會因為長時閑置而被關閉。
示例:

'open_tcp_keepalive' => true

25.tcp_keepidle

描述:指定探測間隔。
說明:配合open_tcp_keepalive使用,如果某個連接在tcp_keepidle內(nèi)沒有任何數(shù)據(jù)來往,則進行探測。
示例:

'tcp_keepidle' => 600

26.tcp_keepinterval

描述:指定探測時的發(fā)包間隔
說明:配合open_tcp_keepalive使用
示例:

'tcp_keepinterval' => 60

27.tcp_keepcount

描述:指定探測的嘗試次數(shù)
說明:配合open_tcp_keepalive使用,若tcp_keepcount次嘗試后仍無響應,則判定連接已關閉。
示例:

'tcp_keepcount' => 5

28.backlog

描述:指定Listen隊列長度
說明:此參數(shù)將決定最多同時有多少個等待accept的連接。
示例:

'backlog' => 128

29.reactor_num

描述:指定Reactor線程數(shù)
說明:設置主進程內(nèi)事件處理線程的數(shù)量,默認會啟用CPU核數(shù)相同的數(shù)量, 一般設置為CPU核數(shù)的1-4倍,最大不得超過CPU核數(shù)*4。
示例:

'reactor_num' => 8

30.task_tmpdir

描述:設置task的數(shù)據(jù)臨時目錄
說明:在swoole_server中,如果投遞的數(shù)據(jù)超過8192字節(jié),將啟用臨時文件來保存數(shù)據(jù)。這里的task_tmpdir就是用來設置臨時文件保存的位置。

需要swoole-1.7.7+

示例:

'task_tmpdir' => '/tmp/task/'

說明

除以上29個選項外,還有幾個不常用或者已廢棄的選項沒有給出。以后如果有實際需求,會補充說明。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號