簡體   English   中英

快速修改HTML內容=>慢

[英]Modifying HTML content on the fly => SLOW

我們正在開發基於PROXY的保護軟件。 它捕獲用戶的http請求,執行代理操作,並捕獲http響應,修改其內容並將其發送回原始用戶。

我們進行了2次嘗試:

  1. SQUID代理和PHP剝除SQUID。 這很有希望,但是在PHP流中,我們不知道我們期望的響應數據的長度,因此每次都超時=> SLOW

  2. 現在,我們編寫了一個.net應用程序。 它可以滿足我們的所有需求,而且它的速度非常快,甚至不會修改內容。 如果我們需要GZIP / GUNZIP,或者只是修改內容,它將變得非常緩慢。

你可以幫我們嗎?

我們在匈牙利的大學中為這個項目工作了將近一年。 我們編寫了一個自動的,自學習的全語義分析器引擎,該引擎可以使用所有語言進行分析和解釋,並且可以檢測和篩選目標內容。 我們還構建了圖像識別軟件,該軟件可以在所有圖像中以90%的置信度檢測目標對象。

一切准備就緒,但是我們的代理應用程序卡住了。

如果有人願意,我們也可以為此工作付費。

我花了很多時間用PHP進行編程-是的,作為一種解釋語言,它可能很慢-並且有大量寫得不好的代碼可用-但是即使在您開始接觸代碼之前,調整環境也可以減少執行時間乘以5-10 然后更改代碼可以使其運行得更快。 最大的勝利來自於對體系結構和數據結構的良好選擇(這對任何語言都是如此,不僅限於PHP)。

我不知道您從哪里開始,但是令人驚訝的是,您無法根據生成內容並通過網絡發送內容所花費的時間來處理流。 要使其超時,是非常錯誤的。 (您不是要使用XML解析器之一來解析HTML嗎?)。 內容的長度對腳本的性能幾乎沒有影響,除非您試圖同時將它們全部映射到PHP的地址空間中。

但是,對於AFAIK,不可能使用PHP直接在Squid中實現內容過濾器(如果您這樣做了,我很想知道您是如何做到的,而且如果您已經實現了ICAP,那非常有意思)。 我猜您正在使用URL重定向器通過PHP編寫的代理腳本來路由請求。

可以用C / C ++編寫ECAP模塊。

圖像識別和自然語言處理並不是編程中的瑣碎練習-因此您必須在團隊中擁有一些優秀的程序員。 真正解決您的問題超出了堆棧溢出答案的范圍,因此向承包商兜售絕對不是主題。

感謝您的回復!

首先:我們的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);

同樣,它是如何工作的:

  1. 客戶端向我們發送HTTP請求
  2. 我們的PHP獲取請求,並將其標頭發送到SQUID代理
  3. Squid完成其工作,然后將響應數據發送回我們的PHP
  4. 我們的PHP通過fsockopen來獲取來自squid的響應數據
  5. 我們分析或修改響應數據
  6. 我們發回給客戶

但是:當我們等待響應數據時,我們會收到它,但我們不知道何時關閉PHP和SQUID之間的連接。 這導致工作緩慢,並且幾乎每次都超時。

如果您有任何想法,請與我們分享!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM