http://www.code-trick.com/thrift-1/
现如今互联网系统越来越复杂,程序员的分工越来越细,如WEB前端使用PHP,后台某些服务使用Python或者C/C++或者nodejs,再或者是erlang开发提供的服务,那如何让这些服务之间可以非常容易的交互呢,google提供了protobuf,而facebook提供了thrift,关于这两者之间的详细的性能评测,等不及的同学可以google一下,我后面也会给出一个非常详细的评测结果出来的。
Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml.
上面是thrift官网给出的thrift的定义,简单的说呢thrift主要就是为了解决跨语言服务交互的问题,包含了一套代码生成框架,目前已经支持很多语言了,在最新的thrift-0.8.0的源码中已经看到比上面的简介还多了c的绑定。thrift同时还带来了多个server模型,让我们尽可能的专注我们服务本身。
thrift 的安装过程这里也不详细讲解了,大家如果在安装时候遇到问题可以跟我们反馈.
下面看一个非常简单的例子,这是一个Echo的服务,服务使用c++开发, 客户端使用php,python与之交互。
首先我们创建一个echo.tft的thrift文件:
service Echo { void Ping(); }
说明我们的服务为Echo,我们提供了一个Ping的接口.
现在我们生成文件,我们生成php和py的客户端文件:
thrift –gen cpp –gen py –gen-php echo.tft
下面看下当前目录的结构:
total 8 drwxr-xr-x 5 Zimilo staff 170 1 15 01:03 . drwxr-xr-x 3 Zimilo staff 102 1 14 20:58 .. -rw-r--r-- 1 Zimilo staff 30 1 14 21:01 echo.tft drwxr-xr-x 9 Zimilo staff 306 1 15 00:58 gen-cpp drwxr-xr-x 4 Zimilo staff 136 1 14 21:01 gen-py
在gen_cpp下有个Echo_server.skeleton.cpp文件,这个就是thrift为我们生成server的模版文件,我们直接拷贝这个文件拷贝为server.cpp,并填充接口,最终文件是:
下面进行编译:
g++ -o echo_server server.cpp Echo.cpp echo_types.cpp -I /usr/local/myserver/thrift/include/thrift/ -lthrift -L /usr/local/myserver/thrift/lib/
ok,现在就生成可执行文件echo_server了,够简单吧,启动我们的server程序
./echo_server
服务端有了,现在我们该来搞定client端了,首先先来看看php如何和我们的服务交互:
够简单吧。再继续看看Python客户端的例子:
python是不是也很简单?现在我们的服务就可以使用php或者python客户端交互了(当然c client必然也可以哈),甚至你还可以继续编写客户端用erlang,go,nodejs….与该服务交互了,真是非常非常的方便吧:)
这篇文章只是个简介让大家对这么好的一个东西有个初步的认识,后续的几篇文章我会更深入的给大家讲讲thrift,不仅从使用层次,更会从thrift源码,稍后会放出来哦。:)