【发布时间】:2017-02-10 12:18:24
【问题描述】:
我有一个问题,不一定在此处提出的大多数问题的范围内。
我正在开发一个应用程序,它会检查域中的某些 A 记录,并测试解析服务器上的端口以检查它们是否打开并正在侦听。
我已在网站的本地副本上添加了功能,但发布速度太慢了,想想看,当前发布的网站也是如此。
您可以在链接上看到应用程序:http://www.domainion.co.za
输入一个域名(不带 www),它会检查某些记录。
这是一个 symfony 应用程序,我通过运行多个 exec() 语句并挖掘特定信息来获取这些记录。我喜欢使用 exec 的原因是,如果返回多条记录,例如下面的命令,它可以让您将每个结果分配给数组的索引。
dig -x 154.0.174.35 +short @8.8.8.8
motairgdiool.hosted.co.za。 (索引 0)
kent.aserv.co.za。 (索引 1)
现在,这花费的时间太长(平均 8 秒才能加载)。我的问题是,如果你必须在这个应用程序中使用所有这些命令并在 shell 脚本中运行它,它们需要不到一秒钟的时间才能运行,我怀疑我需要这么长时间的原因是 PHP 正在打开和关闭一个每个命令的虚拟外壳。
为了更快地运行这些查询,我尝试了以下方法:
shell_exec() - 这需要大约相同的时间,并将所有结果作为字符串返回,我不能使用它。
proc_open - 需要更长的时间,也会返回一个长字符串。
symfony process() 组件 - 花费更长的时间,并将所有结果作为一个字符串返回
dns_check_record() - 您无法检查特定的子域记录
TLDR : 有什么方法可以获得我想要的记录 (n.domain.tld) 并且仍然让应用程序快速运行?
谢谢
【问题讨论】:
-
打开和关闭虚拟外壳(即 pty)通常需要不到 0.1 秒(你可以用
time script -c true /dev/null计时,我得到 0.05 秒)。问题出在其他问题上,例如缓慢的 DNS 或限制。 -
有没有办法将您的评论转化为答案?所以我可以投票一千次???我认为使用 Google 的名称服务器会是更好的选择,因为我比托管服务器的 IDC 更信任 google。但是,是的,删除@8.8.8.8 几乎将速度提高了三倍,我将统计页面与常规 DNS 页面分开以使其更快。感谢您的帮助!
-
听起来您完成了所有工作,因此您可以根据需要将其发布为答案。不过考虑一下 Eric 的 execless 版本,它应该可以再节省几分之一秒,同时更强大