四步完成跨平臺調用——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
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
