多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 对应的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