## 对应的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插件