swoole常用配置设置(新手得细看,里边不少的注释是自己加上的)

2024-04-07 19:08

本文主要是介绍swoole常用配置设置(新手得细看,里边不少的注释是自己加上的),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

红色的标注表示比较重要的参数,可以影响到服务器的运行性能,务必注意

1.worker_num

描述:指定启动的worker进程数。
说明:swoole是master-> n * worker的模式,开启的worker进程数越多,server负载能力越大,但是相应的server占有的内存也会更多,
建议开启的worker进程数为cpu核数的1-4倍。
示例:
'worker_num' => 8

2. max_request
描述:每个worker进程允许处理的最大任务数。
说明:设置该值后,每个worker进程在处理完max_request个请求后就会自动重启。设置该值的主要目的是为了防止worker进程处理大量请求后可能引起的内存溢出。
示例:
'max_request' => 10000

3. max_conn
描述:服务器允许维持的最大TCP连接数
说明:设置此参数后,当服务器已有的连接数达到该值时,新的连接会被拒绝。另外,该参数的值不能超过操作系统ulimit -n的值,同时此值也不宜设置过大,
因为swoole_server会一次性申请一大块内存用于存放每一个connection的信息。
示例:
'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
示例:
'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(end  of  file  文件读取到尾部)检测功能
说明:与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

以下是对这个参数的解释:
建立连接后,立即读数据(读取HTTP请求)。在这种情况下,client发出ACK(ACK (Acknowledgement),即确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。)之后,server被唤醒(accept返回),并立即试图读数据,由于client还没有发数据,server又再度阻塞。这对于调度是一种浪费。
另外,client发的那个ACK也没有实际作用,是不必要的。
假如server端内核忽略client发的ACK,而直接等待数据,数据收到之后再唤醒serve(accept返回),server醒来后就可以直接得到数据并处理。这就是TCP_DEFER_ACCEPT的作用。


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

这篇关于swoole常用配置设置(新手得细看,里边不少的注释是自己加上的)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883420

相关文章

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用