所以最初的问题是我们在WebSphere App Servers上运行一个“行业标准”基于java的web应用程序应用程序,每年访问量约为1亿次。问题出现在重新启动这些appservers之后,我们需要点击几个关键页面,以便在我们让公众看到它们之前,主要的servlet被编译,否则它们往往会在最初的粉碎中崩溃。使用fsockopen预编译关键jsp页面
在某些集群,它共有6页需要被击中,每进行一次35+市场.... 200 ISH网址!
因此,我正在处理的脚本已经完成了所有这些URL的拼凑工作,并且在所有这些URL的结尾处都列出了200个url的数组...现在如何击中它们?
我们使用CGI这个早些时候,它的主要问题是就是是同步的......采取loooooong时间。现在我正在尝试创建一个简单的url.php,它将打开一个单独的URL,然后我可以通过异步方式从JQuery调用该URL。我不想全部命中200在第一疗程,大概在5批次的应该是指速度增加500%:)
所以到url.php。过去我没有使用php,所以套接字对我来说有点新鲜。什么到目前为止,我拼凑起来是这样的:
function checkUrl($url,$port) {
set_time_limit(20);
ob_start();
header("Content-Type: text/plain");
$u = $url;
$p = $port;
$post = "HEAD/HTTP/1.1\r\n";
$post .= "Host: $u\r\n";
$post .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2\r\n";
$post .= "Keep-Alive: 200\r\n";
$post .= "Connection: keep-alive\r\n\r\n";
$sock = fsockopen($u, $p, $errno, $errstr, 10);
if (!$sock) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($sock, $post, strlen($post));
while (!feof($sock)){
echo fgets($sock);
}
ob_end_flush();
}
}
如果URL仅仅是someserver.somedomain.com但如果是一个开放的拍了拍最终失败了伟大的工程(如someserver.somedomain.com/ GB/EN)
据我了解,凡是我的代码迄今所做的是开放套接字连接...但我怎么才能得到它单独解析路径?
我最终需要的唯一输出是HTTP状态代码(200,404,301等),但重要的是它首先获取整个页面才能正确编译。
似乎像这样只显示后好相关问题提交:) 我发现了一个更好的块代码现在工作很好,甚至可以让我分开一些其他的逻辑......但现在我所拥有的是: 函数checkUrl($ host,$ url,$ port){ \t $ fp = fsockopen ($ host,$ port,$ errno,$ errstr,10); \t if(!$ fp){“errstr($ errno)
\ n”;回显“$ errstr($ errno)
”; \t}否则{ \t $出= “GET $网址HTTP/1.1 \ r \ n” 个; \t $ out。=“主机:$主机\ r \ n”; \t $ out。=“连接:关闭\ r \ n \ r \ n”; \t fwrite($ fp,$ out); (!)feof($ fp)){ \t echo fgets($ fp,128); \t} \t fclose($ fp); \t} } – Seer 2012-02-20 10:03:46
即使对于一些更复杂的链接,它也可以很好地工作。通过回应整个事情,我可以看到我获得了完整的内容以及响应标题,因此它在这方面非常完美。现在我只想返回实际的状态码,所以如果有人想添加这个例子,感觉自由.. :) – Seer 2012-02-20 10:04:00