感謝您的回覆!
首先:我們的PHP速度很快,fsockopen速度很慢,因爲它無法知道何時關閉來自SQUID的響應連接。
這裏是我們的代碼:
$buffer = socket_read($client, 4096);
if (!($handle = fsockopen(HOST, SQUIDPROXYPORT, $errno, $error, 1))) {
Log::write($this->log, 'Errno: ' . $errno . ' Error: ' . $error . "\n" . $buffer);
exit('Nem sikerült csatlakozni! ' . $errno . ':' . $error);
}
stream_set_timeout($handle, 0, 100000);
fwrite($handle, $buffer);
$result = '';
do {
$tmp = fgets($handle, 1024);
if ($tmp) {
$result .= $tmp;
}
} while (!feof($handle) && $tmp != false);
socket_write($client, $result, strlen($result));
fclose($handle);
socket_close($client);
再次,它是如何工作的:
- 客戶端發送HTTP請求給我們
- 我們的PHP獲得請求,併發送其頭Squid代理
- 魷魚做了它的東西,並將響應數據發回我們的PHP
- 我們的PHP獲得了fsockopen從魷魚
- 響應數據,我們分析響應數據,或修改
- 我們發回給客戶
但是: 雖然我們正在等待響應的數據,我們接受它,但我們不能知道什麼時候關閉我們的PHP和SQUID之間的連接。這導致工作緩慢,幾乎每次都會超時。
如果您有任何想法,請與我們分享!
感謝您的回覆,但是: – 2013-04-05 10:34:45
請在上方/下方閱讀我的評論。 – 2013-04-05 10:42:30
symcbean您是否使用ECAP完成了這項工作?如果是,你是如何解壓gzip塊的? – sam 2015-11-11 07:27:09