> 백엔드 개발 > PHP 튜토리얼 > 用Java连接php-fpm

用Java连接php-fpm

WBOY
풀어 주다: 2016-06-23 14:31:33
원래의
1149명이 탐색했습니다.

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完整请求的代码:

              <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>
로그인 후 복사

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿