thrift 是怎么具体实现的

thrift 是怎么具体实现的,第1张

喊带明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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12122644.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存