0

PROXY ベースの保護ソフトウェアの開発に取り組んでいます。ユーザーの http 要求をキャッチし、プロキシ処理を行い、http 応答をキャッチし、その内容を変更して元のユーザーに送り返します。

2回の試行がありました:

  1. SQUID プロキシと PHP は、SQUID の外に出ます。それは有望でしたが、PHPストリームでは、予想される応答データの長さを知らなかったため、毎回タイムアウトしていました => SLOW

  2. さて、.net アプリケーションを作成しました。必要なことはすべて実行し、非常に高速で、コンテンツを変更することさえありません。GZIP/GUNZIP が必要な場合、または単にコンテンツを変更する必要がある場合は、非常に遅くなります。

あなたは我々を手伝っていただけますか?

私たちはハンガリーの大学でこのプロジェクトにほぼ 1 年間取り組んでいます。私たちは、すべての言語で分析および解釈でき、ターゲット コンテンツを検出およびスクリーニングできる、自動自己学習型の完全セマンティカル アナライザー エンジンを作成しました。また、すべての画像から 90% の信頼度で対象物を検出できる画像認識ソフトウェアも構築しました。

これですべての準備が整いましたが、プロキシ アプリケーションが動かなくなりました。

誰かがそれを書いてくれるなら、私たちはこの仕事にお金を払うこともできます.

4

2 に答える 2

0

お返事をありがとうございます!

まず第一に、私たちの 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. お客様に返送いたします

BUT: 応答データを待っている間にそれを受け取りますが、PHP と SQUID の間の接続をいつ閉じるかはわかりません。これにより、作業が遅くなり、ほぼ毎回タイムアウトになります。

何かアイデアがあれば、私たちと共有してください!

于 2013-04-05T10:40:38.650 に答える
0

私は PHP でのプログラミングに多くの時間を費やしています - はい、インタープリター型言語なので遅くなる可能性があります - そして、大量の不適切に書かれたコードが利用可能です - しかし、コードに触れ始める前であっても、環境を調整することで実行時間を短縮できます5〜10倍。次に、コードを変更すると、さらに高速になります。最大のメリットは、アーキテクチャとデータ構造の適切な選択から得られます (これは、PHP だけでなく、どの言語にも当てはまります)。

どこから始めているのかわかりませんが、コンテンツを生成してネットワーク経由で送信するのにかかる時間に対して、ストリームを処理できないのは驚くべきことです。タイムアウトになるには、何かが非常に間違っています。(XML パーサーの 1 つを使用して HTML を解析しようとしているのではありませんか?)。すべてを同時に PHP のアドレス空間にマップしようとしない限り、コンテンツの長さはスクリプトのパフォーマンスにほとんど影響しません。

ただし、私の知る限り、PHP を使用して Squid にコンテンツ フィルタを直接実装することはできません (実装した場合は、どのように実装したかを知りたいです。また、ICAP を実装したことがある場合、それは非常に興味深いことです)。PHP で記述されたプロキシ スクリプトを介してリクエストをルーティングするために、URL リダイレクタを使用していると思います。

C/C++ で ECAP モジュールを作成することができます。

画像認識と自然言語処理は、プログラミングの簡単な演習ではありません。そのため、優れたプログラマーをチームに配置する必要があります。問題に実際に対処することは、スタック オーバーフローの回答の範囲をはるかに超えており、請負業者を宣伝することは間違いなく話題から外れています。

于 2013-04-04T21:18:58.467 に答える