合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
[TOC] php版本 Workman4.0:>=php5.4 Workman4.1:>=php7.0 Workman4.2:>=php8.0 Workman5.0,Workman5.1:>=php8.1 GatewayWorker3.1.8: "php": ">=7.0", "workerman/workerman" : "^4.0.30" GatewayWorker4.0.0:"php": ">=7.2","workerman/workerman" : "^4.0.30 || ^5.1" ~~~ composer require workerman/gateway-worker ~~~ [点击这里下载gateway-的demo(包含workman,gateway-worker,start_gateway.php start_business.php等启动入口文件)](http://www.workerman.net/download/GatewayWorker.zip) 客户端与worker进程的关系 ![](https://img.kancloud.cn/28/62/2862bcf1c29f4f2bffaf47d34bb5c93c_800x400.png) 主进程与worker子进程关系 ![](https://img.kancloud.cn/11/ab/11abf49ee9494cd99ba61cd12c0e7af0_725x672.png) ## **安装前检查** 检查是否安装了pcntl、posix扩展 如果并发连接数大于1024建议安装event扩展 >[danger]如果业务并发连接数超过1000同时在线,请务必[优化linux内核](https://www.workerman.net/doc/workerman/appendices/kernel-optimization.html),并[安装event扩展](https://www.workerman.net/doc/workerman/appendices/install-extension.html)。 使用workerman开发**长连接**应用,例如即时通讯、物联网等,**长连接**应用建议直接使用GatewayWorker框架 ``` php -m ``` [打开禁用的函数](http://www.workerman.net/doc/workerman/faq/disable-function-check.html) ``` curl -Ss https://www.workerman.net/check | php ``` ``` pcntl_alarm,pcntl_wait,proc_open,shell_exec stream_socket_server stream_socket_client pcntl_signal_dispatch pcntl_signal pcntl_alarm pcntl_fork posix_getuid posix_getpwuid posix_kill posix_setsid posix_getpid posix_getpwnam posix_getgrnam posix_getgid posix_setgid posix_initgroups posix_setuid posix_isatty ``` 手动解除 1、运行`php --ini`找到php cli所使用的php.ini文件位置 2、打开php.ini,找到`disable_functions`一项解除对应函数的禁用 脚本解除 执行脚本`curl -Ss https://www.workerman.net/fix | php`以解除禁用 ## **优化linux** [优化Linux内核-workerman手册](https://www.workerman.net/doc/workerman/appendices/kernel-optimization.html) ### **修改file-max** 查看**系统级别**能够打开的文件句柄的数量. 这是针对整个OS而言,并不是针对用户的 ``` cat /proc/sys/fs/file-max ``` **修改**系统级别**能够打开的文件句柄的数量** 打开文件 /etc/sysctl.conf,增加以下设置 ~~~conf #//该参数设置系统的TIME_WAIT的数量,如果超过默认值则会被立即清除 net.ipv4.tcp_max_tw_buckets = 20000 #//定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数 net.core.somaxconn = 65535 #//对于还未获得对方确认的连接请求,可保存在队列中的最大数目 net.ipv4.tcp_max_syn_backlog = 262144 #//在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目 net.core.netdev_max_backlog = 30000 #//此选项会导致处于NAT网络的客户端超时,建议为0。Linux从4.12内核开始移除了 tcp_tw_recycle 配置,如果报错"No such file or directory"请忽略 net.ipv4.tcp_tw_recycle = 0 #//系统所有进程一共可以打开的文件数量 fs.file-max = 6815744 #//防火墙跟踪表的大小。注意:如果防火墙没开则会提示error: "net.netfilter.nf_conntrack_max" is an unknown key,忽略即可 net.netfilter.nf_conntrack_max = 2621440 net.ipv4.ip_local_port_range = 10240 65000 ~~~ 运行`sysctl -p`即刻生效。 **说明:** /etc/sysctl.conf 可设置的选项很多,其它选项可以根据自己的环境需要进行设置 ### **Soft open files** **查看Soft open files** 即**进程级别**(单个进程)能够打开的文件句柄的数量。针对当前`shell`的当前用户及其启动的进程的可用文件句柄控制 ``` ulimit -n ``` >[info]如果是1024,就是代表单个进程只能同时最多只能维持1024甚至更少(因为有其它文件的句柄被打开)。如果开启4个进程维持用户连接,那么整个应用能够同时维持的连接数不会超过4\*1024个,也就是说最多只能支持4x1024个用户在线可以增大这个设置以便服务能够维持更多的TCP连接 **Soft open files 修改三种方法:** 第一种:在终端直接运行`ulimit -HSn 102400`,然后重启workerman。 这只是在当前终端有效,退出之后,open files 又变为默认值。 第二种:在`/etc/profile`文件末尾添加一行`ulimit -HSn 102400`,这样每次登录终端时,都会自动执行。更改后需要重启workerman。 第三种:令修改open files的数值永久生效,则必须修改配置文件:`/etc/security/limits.conf`. 在这个文件后加上: ~~~ * soft nofile 1024000 * hard nofile 1024000 root soft nofile 1024000 root hard nofile 1024000 ~~~ 这种方法需要重启服务器才能生效