用Java串連php-fpm

來源:互聯網
上載者:User
java有非常好的執行效能,而php有高效、低成本的開發和部署能力,所以已經有很多前輩做了大量的整合Java和PHP的嘗試,其中的佼佼者要數Resin的Quercus,還有和php-fpm通訊的架構jfastcgi,然而兩者都是運行在http server上的(其中Quercus運行PHP想得到很高的效能,還要掏銀子),如果我們需要一個直接和php-fpm通訊,又不想和http server扯上關係,比如做一個基於Socket長連的web game,用PHP來實現遊戲邏輯,用java來開發一個接受Socket client請求並且轉寄請求給php的中介層,那用jfastcgi或者Quercus就有些無能為力了。

這段時間工作比較閑,所以就花了些時間研究了一下FastCGI協議,讀了一遍jfastcgi的原始碼,寫了fcgi4j這個小工具庫。

該工具庫的jar包和原始碼可以從http://code.google.com/p/fcgi4j/上下載,歡迎拍磚或者修改再利用。
下面是用fcgi4j來實現一個php-fpm完整請求的代碼:

              

// 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();

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.