惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
博客园 - 司徒正美
A
About on SuperTechFans
Vercel News
Vercel News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
爱范儿
爱范儿
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
Google DeepMind News
Google DeepMind News
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
F
Fortinet All Blogs
S
SegmentFault 最新的问题
阮一峰的网络日志
阮一峰的网络日志
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
M
MIT News - Artificial intelligence
Jina AI
Jina AI
H
Help Net Security
量子位
IT之家
IT之家

博客园 - Birdshover

express-partials与express4.x不兼容问题 选择结构(if..else..,switch,try..catch..)的拆分 该省代码的地方要省,反之亦然。 dell笔记本的Broadcom 802.11b/g 无线网卡ubuntu 9.10下安装 facebookde 的 NoSQL数据库cassandra的配置与调用(java&&c#) VirtualBox 虚拟机 Debian系统上安装Cassandra步骤及遇到的问题 大道化简,重构的艺术 读自己的书,走自己的路 厨师炒菜与网站反爬虫问题 jre6的webservice使用Php类库nusoap调用的问题 - Birdshover - 博客园 mysql master/slave 使用感受 java开发守护进程 实现高效易用的java操作mysql包装 部分NLuke版本源码更新(2009-11-1) 单件模式的陷阱 一个不必要的设计 网站、数据库的衍变之路(六) 网站、数据库的衍变之路(五) ASP.NET Forms验证的安全性问题研究——为什么加密代码需要配置为服务
四步完成跨平台调用——thrift的开发应用
Birdshover · 2010-03-16 · via 博客园 - Birdshover

一、安装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的相对来说使用上更广泛一些。