php thrift 调用 java,java和php使用thrift通讯

java和php使用thrift通讯,我们使用java thrift server,然后使用php thrift client,这个方法还是很好的,通过thrift方式去实现。下面我们将结合例子,来谈谈具体的操作方式。

1:首先配置thrift环境

2:配置好java环境

3:将以下thrift所需要运行的4个jar放到java的 jre/lib/ext扩展目录去

4:编写testJava.thrift

namespace java Test

service Something{

i32 ping();

i32 getsum(1:i32 num1,2:i32 num2);

}

5:testJava.thrift目录执行如下命令: thrift -gen java testJava.thrift ,生成的源文件在./gen-java/目录下

6:进入gen-java/Test目录,编写SomethingImpl.java Server.java Client.java

SomethingImpl.java

package Test;

import org.apache.thrift.TException;

class SomethingImpl implements Something.Iface {

public SomethingImpl() {

}

public int ping() throws TException {

System.out.println("Recieve ping from client...");

return 0;

}

public int getsum(int num1,int num2) throws TException {

int x ;

x = num1+num2;

System.out.println(x);

return x;

}

}

编写java的server

package Test;

import java.io.IOException;

import org.apache.thrift.protocol.TBinaryProtocol;

import org.apache.thrift.protocol.TBinaryProtocol.Factory;

import org.apache.thrift.server.TServer;

import org.apache.thrift.server.TSimpleServer;

import org.apache.thrift.server.TThreadPoolServer;

import org.apache.thrift.transport.TServerSocket;

import org.apache.thrift.transport.TTransportException;

public class Server {

private void start() {

try {

TServerSocket serverTransport = new TServerSocket(7911);

Something.Processor processor = new Something.Processor(new SomethingImpl());

Factory protFactory = new TBinaryProtocol.Factory(true, true);

//TServer server = new TThreadPoolServer(processor, serverTransport,protFactory);

//TServer server = new TSimpleServer(new Args(serverTransport).processor(processor));

TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor));

System.out.println("Starting server on port 7911 ...");

server.serve();

} catch (TTransportException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String args[]) {

Server srv = new Server();

srv.start();

}

}

7:编写Client.java

package Test;

import java.io.IOException;

import org.apache.thrift.*;

import org.apache.thrift.protocol.*;

import org.apache.thrift.transport.*;

public class Client {

public static void main(String [] args) {

try {

TTransport transport = new TSocket("localhost", 7911);

TProtocol protocol = new TBinaryProtocol(transport);

Something.Client client = new Something.Client(protocol);

transport.open();

System.out.println("Client calls ping()");

client.ping();

client.getsum(1,2);

System.out.println(client.getsum(1,2));

transport.close();

} catch (TException x) {

x.printStackTrace();

}

}

}

8:回到java的gen-java目录

javac  -d E:\java\thrift\gen-java -s E:\java\thrift\gen-java\Test *.java 执行以下命令

9:启动java的服务

java Test/Server

10:运行java的client

java Test/Client

看到运行结果了。

11:把thrift_trunk里面的 thrift-trunk\lib\php\src中的程序,拷贝到php运行目录

12:testJava.thrift目录执行如下命令: thrift -gen php testJava.thrift ,生成的源文件在./gen-php/目录

14:把里面的gen-php目录拷贝到php运行目录

15:比如php运行目录在D:\AppServ815\www\273\utf\daili\thrift

形成 D:\AppServ815\www\273\utf\daili\thrift\src

D:\AppServ815\www\273\utf\daili\thrift\gen-php

我们在D:\AppServ815\www\273\utf\daili\thrift\目录编写index.php测试程序

/*

* Licensed to the Apache Software Foundation (ASF) under one

* or more contributor license agreements. See the NOTICE file

* distributed with this work for additional information

* regarding copyright ownership. The ASF licenses this file

* to you under the Apache License, Version 2.0 (the

* "License"); you may not use this file except in compliance

* with the License. You may obtain a copy of the License at

*

*   http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing,

* software distributed under the License is distributed on an

* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

* KIND, either express or implied. See the License for the

* specific language governing permissions and limitations

* under the License.

*/

$GLOBALS['THRIFT_ROOT'] = 'src';

require_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php';

require_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php';

require_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php';

require_once $GLOBALS['THRIFT_ROOT'].'/transport/THttpClient.php';

require_once $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php';

$GEN_DIR = 'gen-php';

require_once $GEN_DIR.'/Something.php';

require_once $GEN_DIR.'/Types.php';

error_reporting(E_ALL);

try {

$socket = new TSocket('localhost', 7911);

$transport = new TBufferedTransport($socket, 1024, 1024);

$protocol = new TBinaryProtocol($transport);

$client = new SomethingClient($protocol);

$transport->open();

$client->ping();

print "ping()\n";

$sum = $client->getsum(1,77);

print "1+1=$sum\n";

$transport->close();

} catch (TException $tx) {

print 'TException: '.$tx->getMessage()."\n";

}

?>

运行发现,能得到正确结果。

来源:http://www.chinab4c.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值