四步完成跨平台调用——thrift的开发应用

一、安装thrift

首先,你要有个Linux平台,反正安装好了就行,用不着太多的东西。

 

 

thrift这个东东可以在http://www.thrift-rpc.org/下载。

具体在http://www.thrift-rpc.org/?p=thrift.git;a=shortlog;h=refs/misc/instant,一般点第一个snapshot就行了,这是最新的。版本几个小时更新一个,太牛叉了。

 

 

接下来,安装thrift。到thrift的解压目录,执行命令:

#chmod +x *  //设置执行权限

#./bootstrap.sh

#./configure

#make

#make install

 

二、确定接口

平台与平台的方法调用或数据交换,需要依赖一组结构和一些方法。需要定义好这个方法,才可以进行接下来的开发。比如,我现在需要通过C#调用Java。如果说Java的服务端已经开发好了,那就非常像是适配器模式了。

 

现在书写一个简单的接口:

 

service ThriftTest
{
 void work();
 i32 test(1:string s);
}

service ThriftTest

{

          void work();

          i32 test(1:string s);

}

(注:复杂一些的接口可以参考下载来包里的thrift\test目录下的*.thrift文件。)

 

现在开始生成代码:

# /home/xieping/thrift/compiler/cpp/thrift -gen java test.thrift

# /home/xieping/thrift/compiler/cpp/thrift -gen csharp test.thrift

 

分别生成了java和csharp的应用,在gen-java和gen-csharp目录下。

 

三、开发服务端

 

把Java下的ThriftTest类拷贝到项目中,注意添加package。定义服务类ThriftServer,实现ThriftTest.Iface接口。(项目需要引用thrift\lib\java\src里的项目。同时需要引用slf4j-log4j12-1.5.11.jar,slf4j-api-1.5.11.jar,log4j-1.3alpha-8.jar三个包。)

 

import org.apache.thrift.TException;

 

public class ThriftServer implements ThriftTest.Iface {

 

@Override

public int test(String s) throws TException {

// TODO Auto-generated method stub

return Integer.parseInt(s);

}

 

@Override

public void work() throws TException {

// TODO Auto-generated method stub

System.out.println("ccc");

}

 

}

 

在main方法中写入:

 

try {

ThriftServer t = new ThriftServer();

ThriftTest.Processor p = new ThriftTest.Processor(t);

     TServerTransport serverTransport = new TServerSocket(9090);

     TServer server = new TThreadPoolServer(p, serverTransport);

 

     // Use this for a multithreaded server

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

 

     System.out.println("Starting the server...");

     server.serve();

 

   } catch (Exception x) {

     x.printStackTrace();

   }

   System.out.println("done.");

 

 

 

这里的Server有好几种,我使用了TThreadPoolServer.运行,服务端就OK了。

 

四、客户端调用

客户端把gen-csharp里的类,拷贝到项目中。引用thrift\lib\csharp\src里的项目。

 

然后编写代码:

static void Main(string[] args) {

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

TProtocol protocol = new TBinaryProtocol(transport);

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

transport.Open();

int val = client.test("1213");

client.work();

transport.Close();

Console.WriteLine(val);

}

运行,出结果了。

 

四步就完成了通过Thrift跨平台调用的目的。Java和C#还好些,php调用Java的相对来说使用上更广泛一些。

posted @ 2010-03-16 15:48 Birdshover 阅读(...) 评论(...) 编辑 收藏