addProcess函数 是添加一个用户自定义的工作进程。这个有什么用呢?服务在启动后,可以用于监控、上报或者其他特殊的任务。
注意这个添加的进程是被manager进程管理的。如果这个添加的用户进程经常exit的话,会不断的被manager拉起。所以这个用户进程需要守护,最简单就是让它是一个死循环,不让它频繁退出。
现在写一个测试脚本。作用是创建一个用户进程,可以获取当前服务的一些状态,比如得到当前Server的活动TCP连接数,启动时间,accpet/close的总次数等信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?php //演示添加一个进程,然后接受信息,获取当前服务端有多少连接数 //创建Server对象,监听 127.0.0.1:9501端口 $serv = new swoole_server("127.0.0.1", 9501); //监听连接进入事件 $serv->on('connect', function ($serv, $fd) { echo "Client: Connect.\n"; }); $globServiceProcess = new swoole_process(function($process) use ($serv) { while (true) { $msg = $process->read(); $msg = json_decode($msg,true); $statsArr = $serv->stats(); //发回给当前请求的用户 if(isset($msg['command'])){ $sendMsg = $statsArr[$msg['command']]??"无效指令"; $serv->send($msg['fd'],sprintf("连接fd=%d:结果=%s".PHP_EOL,$msg['fd'],$sendMsg)); } } }); $serv->addProcess($globServiceProcess); //监听数据接收事件 $serv->on('receive', function ($serv, $fd, $from_id, $data) use($globServiceProcess) { if($data){ $data = trim($data); echo '通过管道发送给globServiceProcess指令,获取内容'.PHP_EOL; //发送的内容长度在Linux系统下最大不超过8K $globServiceProcess->write(json_encode(['command'=>$data,'fd'=>$fd])); echo json_encode(['command'=>$data,'fd'=>$fd]); } $serv->send($fd, "Server: ".$data.PHP_EOL); }); //监听连接关闭事件 $serv->on('close', function ($serv, $fd) { echo "Client: Close.\n"; }); //启动服务器 $serv->start(); ?> |
在cli端启动服务。
然后telnet访问,先多开几个telnet,加大连接数
1 2 3 4 5 6 |
[root@VM_0_3_centos think.com]# php process.php Client: Connect. 通过管道发送给globServiceProcess指令,获取内容 {"command":"cp","fd":2}通过管道发送给globServiceProcess指令,获取内容 {"command":"connection_num","fd":2}Client: Close. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@VM_0_3_centos think.com]# telnet 127.0.0.1 9501 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. cp Server: cp 连接fd=2:结果=无效指令 connection_num Server: connection_num 连接fd=2:结果=1 ^] telnet> quit Connection closed. |

我的微信
把最实用的经验,分享给最需要的读者,希望每一位来访的朋友都能有所收获!
2020年2月20日 上午1:06 1F
文章不错非常喜欢
2020年2月20日 下午3:03 2F
文章非常好超喜欢