daemonize 守护进程化【默认值:0】
设置 daemonize => 1 时,程序将转入后台作为守护进程运行。长时间运行的服务器端程序必须启用此项。
如果不启用守护进程,当 ssh 终端退出后,程序将被终止运行。
提示
启用守护进程后,标准输入和输出会被重定向到 log_file
如果未设置 log_file,将重定向到 /dev/null,所有打印屏幕的信息都会被丢弃
启用守护进程后,CWD(当前目录)环境变量的值会发生变更,相对路径的文件读写会出错。PHP 程序中必须使用绝对路径
systemd
使用 systemd 或者 supervisord 管理 Swoole 服务时,请勿设置 daemonize = 1。主要原因是 systemd 的机制与 init 不同。init 进程的 PID 为 1,程序使用 daemonize 后,会脱离终端,最终被 init 进程托管,与 init 关系变为父子进程关系。
但 systemd 是启动了一个单独的后台进程,自行 fork 管理其他服务进程,因此不需要 daemonize,反而使用了 daemonize = 1 会使得 Swoole 程序与该管理进程失去父子进程关系。
worker_num 设置启动的 Worker 进程数。【默认值:CPU 核数】
如 1 个请求耗时 100ms,要提供 1000QPS 的处理能力,那必须配置 100 个进程或更多。
但开的进程越多,占用的内存就会大大增加,而且进程间切换的开销就会越来越大。所以这里适当即可。不要配置过大。
提示
如果业务代码是全异步 IO 的,这里设置为 CPU 核数的 1-4 倍最合理
如果业务代码为同步 IO,需要根据请求响应时间和系统负载来调整,例如:100-500
默认设置为 swoole_cpu_num(),最大不得超过 swoole_cpu_num() * 1000
假设每个进程占用 40M 内存,100 个进程就需要占用 4G 内存,如何正确查看进程的内存占用
网络Io模型
1阻塞模型
2非阻塞模型
3Io多路复用模型
php 中stream系列函数
stream_socket_server 创建一个socket
stream_socket_accept 用于接收链接
stream_socket_client 用于链接服务端
fread 读取资源信息
fwrite 写入资源信息
套接字