喊带明Thrift其实应分成三个部分,一个叫做Thrift代码生成器,一个叫做Thrift应用框架(库),最后一个是它生成的代码。Thrift应用的基本流程如下图所示。
从上图,要生成一个Thrift应用,需用以下文件:
一个.thrift文件:该文件是通信接口的定义,最主要的是信息流的格式。
编程语言:这个无需解释郑告。
Thrift代码生成器(Thrift compiler,翻译成代码生成器似乎更合适):这个行帆东西是安装thrift过程中生成的,它可以产生若干符合你约定通信格式的代码。
Thrift应用框架库:这个东西也是在安装过程中产生的。
其他第三方支撑库:对C++来说,最主要是boost.thread、libevent,log4cxx等,按照运行的模式,生成的代码中可能需用调用这些库。
1)安装thrift:到thrift官网下载exe文件,然后将文件重命名为thrift.exe,拷贝到c:\windows目录下,然后就可以在dos环境下使用了如:thrift -gen Java D:\mywork\javaProject\thriftTest\test.thrift ,输出的java文件默认输出到当前目录下,也可以使用-o参数指定输出路径
2)下载相关依赖包
2.1)libthrift.jar ,下载地址:http://repo1.maven.org/maven2/org/apache/thrift/libthrift/0.9.0/
2.2)slf4j-api.jar
2.3)slf4j-simple.jar
3)编写thrift 接口文件拍派
[java] view plain copy
namespace cpp zam.thrift.test
namespace py thriftTest
namespace java com.zam.thrift.test
namespace php thriftTest
service Hello {
string helloString(1:string word)
}
4)编写接口实现代码
[java] view plain copy
package com.zam.server
import org.apache.thrift.TException
import com.zam.thrift.test.Hello.Iface
public class HelloImpl implements Iface{
private static int count = 0
@Override
public String helloString(String word) throws TException {
// TODO Auto-generated method stub
count += 1
System.out.println("get " + word + " " +count)
return "hello "简锋 + word + " " + count
}
}
5)编写server代码拦贺晌
[java] view plain copy
package com.zam.server
import org.apache.thrift.protocol.TBinaryProtocol
import org.apache.thrift.protocol.TBinaryProtocol.Factory
import org.apache.thrift.server.TServer
import org.apache.thrift.server.TThreadPoolServer
import org.apache.thrift.server.TThreadPoolServer.Args
import org.apache.thrift.transport.TServerSocket
import org.apache.thrift.transport.TTransportException
import com.zam.thrift.test.Hello
import com.zam.thrift.test.Hello.Processor
public class Server {
public void startServer() {
try {
System.out.println("thrift server open port 1234")
TServerSocket serverTransport = new TServerSocket(1234)
Hello.Processor process = new Processor(new HelloImpl())
Factory portFactory = new TBinaryProtocol.Factory(true, true)
Args args = new Args(serverTransport)
args.processor(process)
args.protocolFactory(portFactory)
TServer server = new TThreadPoolServer(args)
server.serve()
} catch (TTransportException e) {
e.printStackTrace()
}
}
public static void main(String[] args) {
System.out.println("thrift server init")
Server server = new Server()
System.out.println("thrift server start")
server.startServer()
System.out.println("thrift server end")
}
}
6)编写client 代码
[java] view plain copy
package com.zam.server
import org.apache.thrift.TException
import org.apache.thrift.protocol.TBinaryProtocol
import org.apache.thrift.protocol.TProtocol
import org.apache.thrift.transport.TSocket
import org.apache.thrift.transport.TTransport
import org.apache.thrift.transport.TTransportException
import com.zam.thrift.test.Hello
public class Client {
public void startClient() {
TTransport transport
try {
System.out.println("thrift client connext server at 1234 port ")
transport = new TSocket("localhost", 1234)
TProtocol protocol = new TBinaryProtocol(transport)
Hello.Client client = new Hello.Client(protocol)
transport.open()
System.out.println(client.helloString("panguso"))
transport.close()
System.out.println("thrift client close connextion")
} catch (TTransportException e) {
e.printStackTrace()
} catch (TException e) {
e.printStackTrace()
}
}
public static void main(String[] args) {
System.out.println("thrift client init ")
Client client = new Client()
System.out.println("thrift client start ")
client.startClient()
System.out.println("thrift client end ")
}
}
8)运行server和client代码
8.1)启动server端
[html] view plain copy
thrift server init
thrift server start
thrift server open port 1234
8.2)启动client端
[html] view plain copy
thrift client init
thrift client start
thrift client connext server at 1234 port
hello panguso 1
thrift client close connextion
thrift client end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)