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>