用Java连接php-fpm

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

转载于:https://www.cnblogs.com/dustinfog/archive/2011/05/18/2049883.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值