php如何能在1~2s左右判断线上服务器是否开启(宕机)?

 徐成奕_98743 发布于 2022-11-14 22:23

想了两种解决方式都不太理想:
第一种是尝试远程链接线上数据库来判断
第二种是curl请求线上服务器的一个接口,
但是这两种方式,等待回应的时间过长,请问如何在1~2s时间内判断线上服务器是否宕机(开启)?

(判断完之后,根据结果进行相应的操作,进行后续操作的时候,需要先判断服务器是否开启。)

4 个回答
  • 做TCP层的心跳检测,定时去发送数据包来判断线上服务器是否宕机。

        
        $this->ftp = stream_socket_client(
            $remote,
            $errno,
            $errstr,
            $this->connection_timeout,
            STREAM_CLIENT_CONNECT,
            $this->context
        );
       
        if (false === $this->ftp) {
            // 连接失败
            throw new RuntimeException(
                sprintf(
                    'Error Connecting to server(%s): %s ',
                    $errno,
                    $errstr
                ),
                $errno
            );
        }
    2022-11-14 22:43 回答
  • 你可以直接 Ping 一下。调用一下 shell 。

    2022-11-14 22:43 回答
  • if(fopen= (url,'r'))

    echo '我没有挂';
    2022-11-14 22:43 回答
  • 可以用fsockopen

    $ip = '192.168.1.1';
    $port = 80;
    $timeout = 2;
    $sock = @fsockopen($ip, $port, $errno, $errmsg, $timeout);
    if($sock) {
       //todo: server is online
    }else {
       //todo: server is offline
    }

    防止意外的超时,可以做个循环

    $count = 3; //尝试次数
    $flag = false; //状态标记
    $ip = '192.168.1.1';
    $port = 80;
    $timeout = 2;
    while($count--) {
        $sock = @fsockopen($ip, $port, $errno, $errmsg, $timeout);
        if($sock) {
            fclose($sock);
            $flag = true;
            break;
        }
    }
    
    if ($flag) {
        //你的业务逻辑
    } else {
        echo "$errmsg ($errno)<br />" . PHP_EOL;
    }
    2022-11-14 22:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有