我想实现就是在页面获取到 workerman进程的一些信息,也就是 命令行
php start.php status
的结果展示。
页面入口
public function info()
{
$data = [];
//获取进程pid
$files = glob(self::$workerManVendorPath."*.pid");
$data['master_pid'] = $files ? file_get_contents($files[0]) : 0;
$fp = stream_socket_client("tcp://127.0.0.1:9501", $errno, $errstr, 10);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
@fwrite($fp, '{"type":"server_monitor"}'."\n");
while (!feof($fp)) {
$info .= fread($fp, 1024);
}
fclose($fp);
}
$info = json_decode($info, true);
$data['process_status_info'] = $info['process_status_info'];
$data['online_user_info'] = $info['online_user_info'];
$this->response(0, '', $data);
exit;
}
public static function onMessage($connection, $message)
{
$message_data = json_decode($message, true);
if (!$message_data) {
return;
}
switch ($message_data['type']) {
//服务状态监控
case 'server_monitor':
//发送status信号
$to_client_info = [];
posix_kill(posix_getppid(), SIGUSR2);
$files = glob(self::$workerManVendorPath."*.status");
$process_info = $files ? file_get_contents($files[0]) : '';
//转换为html显示
$process_info = str_replace(array("\n", "\t"), array("<br>", " "), $process_info);
$to_client_info['process_status_info'] = $process_info;
Gateway::$registerAddress = '127.0.0.1:1238';
$client_info = Gateway::getAllClientSessions();
$to_client_info['online_user_info'] = $client_info;
//发送给客户端
$connection->send(json_encode($to_client_info));
$connection->close();
return;
}
}
但是 posix_kill(posix_getppid(), SIGUSR2);
并没有起到效果,vendor\workerman下也没有生成 status日志文件