# Server 介绍 Server(string $host, int $port=0,int $mode= SWOOLE\_PROCESS,int$sock\_type = SWOOLE\_SOCK\_TCP);参数$host IPv4使用 127.0.0.1表示监听本机,0.0.0.0表示监听所有地址 IPv6使用∶1表示监听本机,∶(相当于0∶0∶0∶0∶0∶0∶0∶0)表示监听所有地址 $port监听的端口 如果$sock\_type为UnixSocket Stream/Dgram,此参数将被忽略监听小于1024端口需要root权限 1024-65535如果此端口被占用server->start时会失败$mode运行的模式 SWOOLE\_PROCESS多进程模式(默认) SWOOLE\_BASE基本模式 $sock\_type指定Socket的类型,支持TCP(默认)、UDP、TCP6、UDP6、UnixSocket Stream/Dgram 6种 SWooLE\_SOCK\_TCP sWoOLE\_SoCK\_TCP6 SWooLE SOCK UDP SWOOLE\_SOCKUDP6 SWOOLE\_UNIX\_DGRAM SWOOLE\_UNIX STREAM # set(array $setting);设置进程 用于设置运行时的各项参数。服务器启动后通过$serv->setting来访问Server->set方法设置的数数组。 ### **最大连接 max_conn=>10000,** 此参数用来设置Server最大允许维持多少个tcp连接。超过此数量后,进入的连接将被拒绝。 最小值为(serv->workernum+ SwooleGtask\_worker\_num)\*2+32 了max\_connection最大不得超过操作系统ulimit-n的值,否则会报一条警告信息,并重置为ulin n的值 ulimit -HSn 65535 ### **max_request=>2000,** 此参数表示worker进程在处理完n次请求后结束运行。manager会重创建一个worker进程。此选项用来防止worker进程内存溢出。 reactor线程数 ### **reactor_num=>4** 通过此参数来调节Reactor线程的数量,以充分利用多核 worker进程数 ### **worker_num => 4,** 设置启动的Worker进程数量。 # task_worker_num 进程 配置Task进程的数量,配置此参数后将会启用task功能。所以Server务必要注册onTask、onFinish2个事件回调函数。如果没有注册,服务器程序将无法启动。日志文件路径 log file =>"data/log/swoole.log,指定swoole错误日志文件。在swoole运行期发生的异常信息会记录到这个文件中。默认会打印到屏幕。 心跳检测机制 heartbeat\_check\_interval=>30 //每隔多少秒检测一次,单位秒,Swoole会轮询所有TCP连接,将超过心跳时间的连接关闭掉 heartbeat idle\_time=>60/TCP连接的最大闲置时间,单位s,如果某f最后一次发包距离现在的时间超过heartbeat idle\_time会把这个连接关闭。守护进程化 ### **daemonize=>1,守护进程** 加入此参数后,执行php server.php将转入后台作为守护进程运行 # 进程查看 netstat -nltp 查看所有进程 pstree -p 9165 查看进程 ![](https://img.kancloud.cn/c6/fd/c6fd7f816902dc274e00db95e3483c8c_370x296.png) ```//创建Server对象,监听 127.0.0.1:9501端口 $serv = new Swoole\Server("0.0.0.0", 901); //设置进程 $setting = [ //work 进程 'worker_num'=>6, //线程 'reactor_num'=>4, //task 进程 'task_worker_num'=>3, //最大请求数,超出会出现生成进程 'max_request'=>2000, /*最大连接数。超过此数量后,进入的连接将被拒绝。 最小值为(serv->workernum+ SwooleGtask\_worker\_num)\*2+32*/ 'max_conn'=>10000, //守护进程 关掉链接还是会进行 'daemonize'=>1 ]; $serv->set($setting); //监听连接进入事件 $serv->on('receive', function () { }); $serv->on('task', function () { }); //启动服务器 $serv->start();```