swoole_server的相關屬性

在swoole中,一個swoole_server的相關屬性能夠經過php

$serv->set( $array configs );

函數來配置,這些配置選項使得swoole更加靈活。 示例:html

$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, ));

配置選項以及相關介紹以下:node

[TOC] ####1.worker_num 描述:指定啓動的worker進程數。
說明:swoole是master-> n * worker的模式,開啓的worker進程數越多,server負載能力越大,可是相應的server佔有的內存也會更多。同時,當worker進程數過多時,進程間切換帶來的系統開銷也會更大。所以建議開啓的worker進程數爲cpu核數的1-4倍。
示例:react

'worker_num' => 8

####2.max_request 描述:每一個worker進程容許處理的最大任務數。
說明:設置該值後,每一個worker進程在處理完max_request個請求後就會自動重啓。設置該值的主要目的是爲了防止worker進程處理大量請求後可能引發的內存溢出。
示例:git

'max_request' => 10000

####3.max_conn 描述:服務器容許維持的最大TCP鏈接數
說明:設置此參數後,當服務器已有的鏈接數達到該值時,新的鏈接會被拒絕。另外,該參數的值不能超過操做系統ulimit -n的值,同時此值也不宜設置過大,由於swoole_server會一次性申請一大塊內存用於存放每個connection的信息。
示例:github

'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

示例:swoole

'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/'

####說明 除以上29個選項外,還有幾個不經常使用或者已廢棄的選項沒有給出。之後若是有實際需求,會補充說明。

相關文章
相關標籤/搜索