• 四步完成跨平台调用——thrift的开发应用 Birdshover 博客园


    四步完成跨平台调用——thrift的开发应用 - Birdshover - 博客园

    四步完成跨平台调用——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的相对来说使用上更广泛一些。

    分类: .Net language and other
  • 相关阅读:
    帆软—ORA-28040: No matching authentication protocol;
    Vmware虚拟机三种网络模式详解(转)
    ABAP—权限对象设计及权限检查
    ABAP—SM30维护表时提示“客户XXX有“不可修改”的状态”
    ABAP—SM维护表及标题“+”处理
    NC—语义模型调用存储过程(转)
    ABAP—多页签SHEET、选项参数或block隐藏
    oracle—聚合函数(max、min、avg、sum、count)
    oracle—decode、nvl、rownum、like、all、any使用
    从零开始的react入门教程(七),react中的状态提升,我们为什么需要使用redux
  • 原文地址:https://www.cnblogs.com/lexus/p/2778272.html
Copyright © 2020-2023  润新知