ホームページ  >  記事  >  バックエンド開発  >  php-fpmをJavaに接続する

php-fpmをJavaに接続する

WBOY
WBOYオリジナル
2016-06-23 14:31:331110ブラウズ

Java は非常に優れた実行パフォーマンスを備え、PHP は効率的かつ低コストの開発およびデプロイメント機能を備えているため、多くの先人が Java と PHP を統合するために多くの試みを行ってきました。その中で最も優れているのは、Resin の Quercus であり、jfastcgi が通信するフレームワークです。ただし、両方とも http サーバー上で実行されます (Quercus は、高いパフォーマンスを得るために PHP を実行するため、お金を支払う必要があります)。ただし、php-fpm との直接通信が必要な場合は、そうではありません。 http サーバーに関連するもの。ソケットの長い接続に基づいて Web ゲームを作成する、PHP を使用してゲーム ロジックを実装する、Java を使用してソケット クライアントのリクエストを受け入れ、そのリクエストを PHP に転送する中間層を開発する、その後 jfastcgi または Quercus を使用するなど。多少はどうしようもないです。

この期間中は仕事が比較的自由だったので、FastCGI プロトコルを勉強し、jfastcgi のソース コードを読み、小さなツール ライブラリ fcgi4j を作成することに時間を費やしました。

このツール ライブラリの jar パッケージとソース コードは http://code.google.com/p/fcgi4j/ からダウンロードできます。コピーを作成したり、再利用するために変更したりすることはできます。
以下は、fcgi4j を使用して php-fpm の完全なリクエストを実装するコードです:

              <p class="sycode">              //    create FastCGI connection        FCGIConnection connection     =     FCGIConnection.open();connection.connect(    new     InetSocketAddress(    "    127.0.0.1    "    ,     9000    ));connection.beginRequest(    "    fcgi.php    "    );    //    set the HTTP METHOD,GET for default        connection.setRequestMethod(    "    post    "    );    //    set the queryString, not required when no queryString        connection.setQueryString(    "    text=hello    "    );    //    add FCGIParams        connection.addParams(    "    DOCUMENT_ROOT    "    ,     "    /var/www    "    );    byte    [] postData     =         "    hello=world    "    .getBytes();    //    set contentLength, it's importent        connection.setContentLength(postData.length);connection.write(ByteBuffer.wrap(postData));    //    print response headers        Map    <    String, String    >     responseHeaders     =     connection.getResponseHeaders();    for    (String key : responseHeaders.keySet()){ System.out.println(    "    HTTP HEADER:     "         +     key     +         "    ->    "         +     responseHeaders.get(key));}    //    read response data        ByteBuffer buffer     =     ByteBuffer.allocate(    10240    );connection.read(buffer);buffer.flip();    byte    [] data     =         new         byte    [buffer.remaining()];buffer.get(data);System.out.println(    new     String(data));    //    close the connection        connection.close();              </p>

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。