功能:实现各个服务模块之间的跨语言、跨平台的通信,是RPC框架的一种,与dubbo类似。

Thrift的应用原理:

  Thrift的部分功能相当于代码生成引擎,使用Thrift定义的语言编写*.Thrift文件,文件中主要定义了数据结构和数据接口!使用Thrift命令生成对应语言的代码,然后用对应的语言实现定义的数据结构和接口的对象。

  Thrift的另一部分功能是基于Thrift封装的库实现客户端与服务端之间的通信!

Thrift的安装:

  Thrift支持多种语言,建议使用哪种语言配置、编译、安装哪种语言的功能。否则可能安装失败!

Thrift的使用:

  工程下面有test文件夹,里面有各种语言的demon,以java为例,说明;

  使用:

thrift --gen java JavaBeansTest.thrift 

  生成java文件,生成的文件在 /gen-java目录下!

  一共生成两个文件,其中一个对应的是结构体,另一个对应的是接口!

  可以看到生成的两个文件代码量很大,暂时不必因此感觉艰难,继续看下去!

  将这两个文件拷贝到自己项目中,并引入thrift-0.5.0-fix-backlog.jar, slf4j-api 和 slf4j-simple 这三个JAR包!

  然后将生成的文件加入到自己的项目中,并编写接口中的实现代码!

  好了,下面看一个简单的demo:

  服务端:

package Test;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.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;public class Server {private void start() {try {TServerSocket serverTransport = new TServerSocket(7911);Something.Processor processor = new Something.Processor(new SomethingImpl());Factory protFactory = new TBinaryProtocol.Factory(true, true);TServer server = new TThreadPoolServer(processor, serverTransport, protFactory);System.out.println("Starting server on port 7911 ...");server.serve();} catch (TTransportException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}public static void main(String args[]) {Server srv = new Server();srv.start();}} 

  客户端:

  

package Test;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;public class Client {public static void main(String[] args) {try {TTransport transport = new TSocket("localhost", 7911);TProtocol protocol = new TBinaryProtocol(transport);Something.Client client = new Something.Client(protocol);transport.open();System.out.println("Client calls ping()");client.ping();transport.close();} catch (TException x) {x.printStackTrace();}}}

  整个项目结构:

  

  其中main 和 sql 不需要,可以删去!Something是由Thrift生成的代码,

namespace java Test
service Something{i32 ping()
}

test.thrift

SomethingImpl是接口的实现:

  

package Test;import org.apache.thrift.TException;class SomethingImpl implements Something.Iface {public SomethingImpl() {}/*** 方法的实现** @return* @throws TException*/public int ping() throws TException {System.out.println("Recieve ping from client...");return 0;}
}

  在这个demo中,server和client在一个项目下,实际上可以部署到多个项目,或者是不同机器上,代码稍作改动即可!

  

转载于:https://www.cnblogs.com/tengpan-cn/p/6026750.html

Thrift框架简介相关推荐

  1. Thrift功能简介

    什么是Thrift? Thrift是一个可用于扩展跨语言服务开发的软件框架. 利用Thrift框架,我们可以构建出一个在多种语言之间相互通信的项目结构.例如:C ++,Java,Python,PHP, ...

  2. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  3. 《HiWind企业快速开发框架实战》(0)目录及框架简介

    <HiWind企业快速开发框架实战>(0)目录及框架简介 本系列主要介绍一款企业管理系统快速开发框架,该框架旨在快速完成企业管理系统,并实现易维护可移植的目标. 使用逐个系统模块进行编码的 ...

  4. WPF Interaction框架简介(一)——Behavior

    原文:WPF Interaction框架简介(一)--Behavior 在WPF 4.0中,引入了一个比较实用的库--Interactions,这个库主要是通过附加属性来对UI控件注入一些新的功能,除 ...

  5. go语言学习(二)——Gin 框架简介

    GoWeb开发有很多框架,如Beego.Gin.Revel.Echo.IRis等,学习框架可以快速做开发,对比常见goweb框架,通过其github的活跃度,维护的team,生产环境中的使用率以及师兄 ...

  6. Apache Thrift使用简介

    Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.和其它RPC框架相比,它主要具有如下连个特点: 高性能. 它采用的是二进制序列化,并且用的是长 ...

  7. Java开源——常见J2EE框架简介

    Java开源--常见J2EE框架简介 Spring Framework Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口 ...

  8. 【EventBus】EventBus 事件总线框架简介 ( EventBus 使用流程 )

    文章目录 一.EventBus 事件总线框架简介 二.EventBus 使用流程 一.EventBus 事件总线框架简介 Android 中的事件传递机制 : 使用 Intent 在组件间传递信息 ; ...

  9. 【Android 热修复】热修复原理 ( 热修复框架简介 | 将 Java 字节码文件打包到 Dex 文件 )

    文章目录 一. 热修复框架简介 1.类替换 2.so 替换 3.资源替换 4.全平台支持 5.生效时间 6.性能损耗 7.总结 二. 将 Java 字节码文件打包到 Dex 文件 一. 热修复框架简介 ...

  10. PHP微信开发框架LaneWeChat框架简介

    框架名称:LaneWeChat 微信PHP开发框架 框架版本:1.4 框架简介:这是一个为快速开发微信应用而生的PHP框架.将微信的开发者功能根据文档进行了封装.为了快速开发的目的,开发者完全不需要要 ...

最新文章

  1. 逆天改命,机械飞升:渐冻症科学家拒绝等死,将自己改造成了「半机械人」...
  2. DeepMind集成AI智能体架构「MERLIN」:基于目标导向智能体中的无监督预测记忆
  3. 同步、异步;阻塞、非阻塞
  4. smarty模板引擎_5-自定义变量调节器
  5. Postman全局变量的使用
  6. Git之submodule使用总结
  7. eclipse 断点调试快捷键
  8. 【Python学习】 - 如何在Spyder中弹出plot绘图窗口而不是在Console中绘图
  9. 不是所有人都懂这样做,你若做了就能高升!
  10. 利用form的“accept-charset”在不同编码的页面间提交表单
  11. Failed to build Android - icescreem-4.0.4
  12. 【图像去噪】基于matlab GUI均值+中值滤波图像去噪【含Matlab源码 372期】
  13. 判断丑数python_263. 丑数(Python)
  14. 520男生送什么礼物好、实用小礼物合集
  15. 数据学习(十)-假设检验
  16. Win10邮箱管理QQ邮箱+163邮箱
  17. 【思科模拟器实验】交换机端口聚合
  18. Java简单的对外接口验签
  19. Auto.js 设置通知栏
  20. idea IntelliJ IDEA 2018.2.5 x64 破解

热门文章

  1. 慎用"加速"一词,可以使用"早日"代替
  2. 解决办法: error: passing ‘const VideoFrame’ as ‘this’ argument discards qualifiers [-fpermissive]
  3. 纯php程序无数据,无数据库的详细域名查询程序PHP版(1)_php基础
  4. 前端和java选哪个_web前端和java哪个好?新手该选择哪个
  5. android gl11,Android 中OpenGL的使用
  6. chmod和chown命令的用法
  7. FastDFS入门一篇就够 1
  8. Ubuntu 远程使用ssh 开启服务器终端的方法
  9. 12.1-12.5 LNMP架构介绍 , MySQL安装 , PHP安装, Nginx介绍
  10. BZOJ2555:SubString(SAM,LCT)