这是我的设置:
我正在使用树莓派3在家里运行cronjob。每1分钟,此cronjob执行一个php文件,该文件需要正常的Internet连接。为了检查互联网是否可以在我的家里正常工作(finicky互联网),我在文件开头修改并实现了以下功能:
function is_connected_true_false()
{
$multiple_domains = array('www.example.com', 'www.google.com', 'www.bing.com');
$random_domain_used = $multiple_domains[rand(0,2)];
$connected = @fsockopen($random_domain_used, 80, $errno, $errstr, 10);
if($connected) {
$is_conn = true;
fclose($connected);
} else {
$is_conn = false; //action in connection failure
// Log error to the server
//$errno; // Error #
//$errstr; // Error as a string
}
return $is_conn;
}
到目前为止,该方法仍然有效,但是,我相信以后会遇到一些问题。
此cronjob每1分钟运行一次php文件!这是1440个网站每天的请求!从我家的IP。
我至少添加了3个不同的域,但我不想将我的IP列入黑名单。我选择这3个域是因为它们的可靠性和加载时间。
加载页面似乎也要花费一些时间(有时需要几秒钟,互联网有些挑剔...)。
通过打开整个网站而不是对8.8.8.8进行ping操作,可能会占用更高的带宽。
其他信息: php文件实质上是从其他网站获取信息。 致电x网站时,由于所需的超时值过长,我无法使用(返回码/退出状态)。否则,我会用它。
解决方案/改进?
我可以ping 8.8.8.8服务器或其他任何可靠的服务器,而不是完全加载网站来检查Internet是否可用吗? 如果是这样,怎么办?我能达到与当前功能相同的结果吗?
我尝试使用8.8.8.8代替网站域,但是它似乎不起作用。不知道为什么。
其他: 请记住,PHP爱好者在这里。尽管我做了一些研究,但是我对网络协议,TCP,HTTP,ICMP,程序包以及所有类似的东西一无所知,但是!
我获得代码的来源:Determine in php script if connected to internet?
编辑: -ochi建议我购买或租用主机/ VPS服务。这可能有效。但是,我相信有更好的方法。谢谢。
EDIT2: 我发现对服务器的ping使用的协议或端口与http请求使用的协议或端口不同,如何确保端口80正常工作?我是否应该在功能数组中添加更多网站以分散流量/请求?
答案 0 :(得分:0)
我不用担心。谷歌快速搜索显示,谷歌声称每秒可提供4万次搜索。
此外,google,bing和所有其他巨头都使用循环DNS,这些IP指向负载均衡器,因此,即使您已本地缓存DNS信息,您仍应在每个给定服务器之间切换。
ivan@darkstar:~$ nslookup www.google.com
Server: 192.168.1.2
Address: 192.168.1.2#53
Non-authoritative answer:
Name: www.google.com
Address: 74.125.141.99
Name: www.google.com
Address: 74.125.141.106
Name: www.google.com
Address: 74.125.141.147
Name: www.google.com
Address: 74.125.141.103
Name: www.google.com
Address: 74.125.141.105
Name: www.google.com
Address: 74.125.141.104
Name: www.google.com
Address: 2607:f8b0:400c:c06::67
就他们而言,每分钟您的1个请求甚至不是沧海一粟。