## 對應的Config類
~~~
ESD\Core\Server\Config\PortConfig
~~~
## 配置項
~~~
/**
* 名稱
* @var string
*/
protected $name;
/**
* @var string
*/
protected $portClass;
/**
* 需要監聽的ip地址默認為"0.0.0.0"
* IPv4使用 127.0.0.1表示監聽本機,0.0.0.0表示監聽所有地址
* IPv6使用::1表示監聽本機,:: (相當于0:0:0:0:0:0:0:0) 表示監聽所有地址
* @var string
*/
protected $host;
/**
* 需要監聽的端口
* 監聽小于1024端口需要root權限
* @var int
*/
protected $port;
/**
* sock類型默認為SWOOLE_SOCK_TCP
* @var int
*/
protected $sockType;
/**
* 是否啟動SSL
* @var bool
*/
protected $enableSsl;
/**
* Listen隊列長度,此參數將決定最多同時有多少個待accept的連接
* @var int
*/
protected $backlog;
/**
* TCP_NoDelay open_tcp_nodelay => true ,啟用tcp_nodelay
* 啟用open_tcp_nodelay,開啟后TCP連接發送數據時會關閉Nagle合并算法,立即發往客戶端連接。在某些場景下,如http服務器,可以提升響應速度。
* 默認情況下,發送數據采用Nagle 算法。這樣雖然提高了網絡吞吐量,但是實時性卻降低了,在一些交互性很強的應用程序來說是不允許的,使用TCP_NODELAY選項可以禁止Nagle 算法。
* @var bool
*/
protected $openTcpNodelay;
/**
* 開啟TCP快速握手特性。此項特性,可以提升TCP短連接的響應速度,在客戶端完成握手的第三步,發送SYN包時攜帶數據。
* @var bool
*/
protected $tcpFastopen;
/**
* 此參數設定一個秒數,當客戶端連接連接到服務器時,在約定秒數內并不會觸發accept,直到有數據發送,或者超時時才會觸發。
* @var int
*/
protected $tcpDeferAccept;
/**
* 打開EOF檢測,此選項將檢測客戶端連接發來的數據,當數據包結尾是指定的字符串時才會投遞給Worker進程。
* 否則會一直拼接數據包,直到超過緩存區或者超時才會中止。當出錯時底層會認為是惡意連接,丟棄數據并強制關閉連接。
* @var bool
*/
protected $openEofCheck;
/**
* 啟用EOF自動分包。
* 當設置open_eof_check后,底層檢測數據是否以特定的字符串結尾來進行數據緩沖,但默認只截取收到數據的末尾部分做對比,這時候可能會產生多條數據合并在一個包內。
* @var bool
*/
protected $openEofSplit;
/**
* 與 open_eof_check 或者 open_eof_split 配合使用,設置EOF字符串。
* @var string
*/
protected $packageEof;
/**
* 打開包長檢測特性。包長檢測提供了固定包頭+包體這種格式協議的解析。啟用后,可以保證Worker進程onReceive每次都會收到一個完整的數據包。
* @var bool
*/
protected $openLengthCheck;
/**
* 長度值的類型,接受一個字符參數,與php的 pack 函數一致。目前Swoole支持10種類型:
* c:有符號、1字節
* C:無符號、1字節
* s :有符號、主機字節序、2字節
* S:無符號、主機字節序、2字節
* n:無符號、網絡字節序、2字節
* N:無符號、網絡字節序、4字節
* l:有符號、主機字節序、4字節(小寫L)
* L:無符號、主機字節序、4字節(大寫L)
* v:無符號、小端字節序、2字節
* V:無符號、小端字節序、4字節
* @var string
*/
protected $packageLengthType;
/**
* 設置最大數據包尺寸,單位為字節
* @var int
*/
protected $packageMaxLength;
/**
* 從第幾個字節開始計算長度,一般有2種情況:
* length的值包含了整個包(包頭+包體),package_body_offset 為0
* 包頭長度為N字節,length的值不包含包頭,僅包含包體,package_body_offset設置為N
* @var int
*/
protected $packageBodyOffset;
/**
* length長度值在包頭的第幾個字節。
* @var int
*/
protected $packageLengthOffset;
/**
* 設置SSL隧道加密,設置值為一個文件名字符串,制定cert證書和key私鑰的路徑。
* https應用瀏覽器必須信任證書才能瀏覽網頁
* wss應用中,發起WebSocket連接的頁面必須使用https
* 瀏覽器不信任SSL證書將無法使用wss
* 文件必須為PEM格式,不支持DER格式,可使用openssl工具進行轉換
* @var string
*/
protected $sslCertFile;
/**
* 啟用SSL后,設置ssl_ciphers來改變openssl默認的加密算法。Swoole底層默認使用EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
* @var string
*/
protected $sslCiphers;
/**
* 設置OpenSSL隧道加密的算法。Server與Client使用的算法必須一致,否則SSL/TLS握手會失敗,連接會被切斷。 默認算法為 SWOOLE_SSLv23_METHOD
* @var string
*/
protected $sslMethod;
/**
* 啟用Http協議處理
* @var bool
*/
protected $openHttpProtocol;
/**
* 啟用websocket協議處理
* @var bool
*/
protected $openWebsocketProtocol;
/**
* 啟用mqtt協議處理,啟用后會解析mqtt包頭,worker進程onReceive每次會返回一個完整的mqtt數據包。
* @var bool
*/
protected $openMqttProtocol;
/**
* 啟用websocket協議中關閉幀(opcode為0x08的幀)在onMessage回調中接收,默認為false。
* 開啟后,可在WebSocketServer中的onMessage回調中接收到客戶端或服務端發送的關閉幀,開發者可自行對其進行處理。
* @var bool
*/
protected $openWebsocketCloseFrame;
/**
* 服務SSL設置驗證對端證書。默認關閉,即不驗證客戶端證書。若開啟,必須同時設置 ssl_client_cert_file選項
* @var bool
*/
protected $sslVerifyPeer;
/**
* 服務SSL設置驗證對端證書
* @var string
*/
protected $sslClientCertFile;
/**
* 設置端口重用,此參數用于優化TCP連接的Accept性能,啟用端口重用后多個進程可以同時進行Accept操作。
* @var bool
*/
protected $enableReusePort;
/**
* 設置此選項為true后,accept客戶端連接后將不會自動加入EventLoop,僅觸發onConnect回調。
* worker進程可以調用$serv->confirm($fd)對連接進行確認,此時才會將fd加入EventLoop開始進行數據收發,也可以調用$serv->close($fd)關閉此連接。
* @var bool
*/
protected $enableDelayReceive;
/**
* 是否自定義握手
* @var bool
*/
protected $customHandShake = false;
/**
* @var int
*/
protected $wsOpcode = self::WEBSOCKET_OPCODE_TEXT;
~~~
## 例子
**需要注意的是**
>[danger] name,port,及協議是必填,在yml中name可以省略會自動從上級Map中獲取
> 以下例子只是開啟端口,除了http外實際使用中還需要配置PackTool,詳情查看Pack插件
### 開啟Http
name會自動設置為http
~~~
port:
http:
host: 0.0.0.0
port: 8080
sock_type: 1
open_http_protocol: true
~~~
端口類會有默認值,如需自己指定可以設置 port_class,值為類的全稱,端口類需要繼承
use ESD\Core\Server\Port\ServerPort
### 開啟Websocket
```
port:
http:
host: 0.0.0.0
port: 8081
sock_type: 1
open_websocket_protocol: true
ws_opcode: 1
custom_hand_shake: false
```
* ws_opcode 為opcode值,默認為WEBSOCKET_OPCODE_TEXT也就是1
* custom_hand_shake 是否開啟自定義握手,默認false
### 開啟Tcp
```
port:
tcp:
name: tcp
host: 0.0.0.0
port: 8082
sock_type: 1
open_length_check: true
package_length_type: 'N'
package_body_offset: 0
package_length_offset: 0
```
* open_length_check 開啟長度檢查 需要配置 package_body_offset 和 package_length_offset
* open_eof_check 開啟eof檢查,配合 open_eof_split,package_eof
- 前言
- 捐贈ESD項目
- 使用篇-通用
- 環境
- 安裝
- 規范
- 壓力測試
- 配置
- 如何設置YML配置
- server配置
- 端口配置
- 項目結構
- 事件派發
- 日志
- 注解
- DI容器
- 自定義進程
- 并發及協程池
- Console插件
- Scheduled插件
- Redis插件
- AOP插件
- Saber插件
- Mysql插件
- mysql事務
- Actuator插件
- Whoops插件
- Cache插件
- PHPUnit插件
- Security插件
- Session插件
- EasyRoute插件
- http路由
- ProcessRpc插件
- AutoReload插件
- AnnotationsScan插件
- Tracing-plugin插件
- MQTT插件
- Pack插件
- AMQP插件
- Validate插件
- Uid插件
- Topic插件
- Blade插件
- CsvReader插件
- hashed-wheel-timer-plugin插件
- 使用篇-HTTP
- 路由
- 靜態文件
- 路由定義
- 修飾方法
- 路由分組
- 資源路由
- 端口作用域
- 異常處理
- 跨域請求
- 路由緩存
- 控制器
- 控制器初始化
- 前置操作
- 跳轉和重定向
- 異常處理
- 請求
- 請求對象
- 請求信息
- request消息
- response消息
- stream消息
- url接口
- 驗證器
- 內置驗證器
- 內置過濾器
- 使用篇-WS
- 如何使用
- 路由
- 使用篇-TCP
- 插件篇-PluginSystem
- 微服務篇-ESDCloud
- CircuitBreaker插件
- SaberCloud插件
- 分布式鏈路追蹤系統
- Consul插件