Thrift那点事

【Thrift入门】QT实现Thrift C++服务端和客户端 效果示例 本文为了测试和显示方便,将Thrift客户端和服务端编写在同一QT程序中,分别开启一个线程进行交互。 测试操作: 点击“开启服务”,开启Thrift服务端的监听;在“测试数据”的输入框中输入测试消息,点击“请求服务”发送给服务端进行处理;并把服务端的返回结果显示在“返回结果”的输出框中。 QT调用Thrift库 编译VS2015 x64版本的Thrift静态库,并在QT工程的.pro文... 阅读详情

Thrift那点事

本博文不是Thrift启蒙和Hello World,如果有需要请绕道开车Thrift官网
http://thrift.apache.org,而是旨在对Thrift学完后似懂非懂的一个整理和总结。希望能帮到正处于这个水深火热阶段的同学们。

  • Thrift的用途
  • Thrift的五大金刚
  • facebook的Swift

Thrift的用途

既然大家已经初步学习过了Thrift,Thrift到底是什么也大概知道了,最强悍的也就是跨语言的rpc,而我之所以学习这个主要还是公司内部的分布式服务主要的传输方式是Thrift。可能会有同学去跟dubbo这些做比较,其实Thrift自身在分布式上没有什么优势,它没有像dubbo那样有注册中心、服务发现和一些监控。Thrift就是通过定义一个用自己的语言描述的公用的服务(Thrift文件),然后又能提供-gen生成各种语言去生成服务和调用服务。

Thrift的五大金刚

五大金刚是我自己定的,网上并没有相关说法,只是方便自己记忆api和熟悉流程。五大金刚分别是:
Transport
Protocol
Processor
Client
TServer

Transport传输层

主要分两个维度:服务端和客户端

  • 服务端的父类TServerTransport,
    分为阻塞TServerSocket和非阻塞TNonblockingTransport(这是个抽象类,实现是TNonblockingServerSocket)。
    所以从实现上来看都是XXServerSocket,这样好记点。

  • 客户端的父类是TTransport,同样也会分阻塞和非阻塞,
    更有分不同传输形式的,比如TSocket面向socket编程的,而THttpClient就是http协议传输,TFileTransport则是文件传输的。
    这里的TSocket是同步阻塞的,也就是传统的IO,而TFrameTransport是同步非阻塞的,相当于NIO,还有TNonblockingTransport是异步非阻塞的,相当于AIO。后两者都是非阻塞的,所以都要对应服务端的TNonblockingServerTransport

Protocol协议

传输的协议,在thrift中提供的协议不多,主要分为两种:文本传输(如json、compact压缩)和二进制传输(binary)。
这里很容易疑惑和混淆,强调一点,无论是文本传输还是二进制传输,最终他们都会根据设定的编码方式(如UTF-8)转换成相应的二进制字节,然后再传输!
那???这两个有什么区别。文本传输和二进制传输的唯一区别在于换行符的处理。二进制是不管,而文本(之所以叫文本就是要看的,当然要处理换行)处理换行符要根据操作系统默认的编码方式,在unix下是2个字节,但是在dos是4个字节,在使用如ftp下载文件时候,转换到不同的操作系统会根据系统编码自动加入或者去除2个字节。所以文本内容在不同操作之间传输一定要用文本传输,因为用二进制根本就不会去转换,那么到不同操作系统后就无法识别。如果是对于二进制文件,如图片、视频、可执行文件,就一定要用二进制传输,想象自己的图片在别的系统里面加了几个字节。。。(⊙o⊙)…你确定还能用?当然了,这一切都是站在不同操作系统的基础上做的,而过是同样的操作系统,不会有这些困惑

Processor

处理器嘛,在thrift自动生成java文件中,IFace,Client和Processor是最重要的静态内部类。这个Processor就是服务端在实现具体接口逻辑的,然后在服务端启动的时候告诉服务器,这个接口要这么处理!所以,这个客户端根本不需要用到。

Client

客户端。。。所以服务端根本不用理这里。这个是在客户端调用服务时候用的,内部的方法都包含了我们在接口里面定义的所有method,所以客户端传好相应的参数后,直接client上调用。

TServer

这个也是服务端党的,跟TServerTransport对应的,其实就是processor+Transport+protocol的一个组合,就是强行把这三者联合在一起使用,对外提供服务TServer.serve();主要的有三个TServer:

  • TSimpleServer 单线程阻塞IO,这个也在测试那里玩玩
  • TThreadServer 多线程阻塞IO
  • TNonblockingServer 这个当然是多线程非阻塞IO了

facebook的Swift

有代码洁癖的可能会不爽thrift自动生成的那个近千行的java文件了,而且在编程上对传输的结构不是很明晰,经常要回去看thrift文件。所以可以采用facebook的开源项目swift,在thrift上进行了改良,使用@ThriftServer、@ThriftStruct等注解要描述一个java对象,而且还提供了maven插件可以自动生成。

【Python】Thrift rpc 接口测试 python thrift rpc 协议的接口自动化测试使用方案 阅读详情

相关推荐

Thrift介绍以及Java中使用Thrift实现RPC示例

场景 Thrift Thrift最初由Facebook研发,主要用于各个服务之间的RPC通信,支持跨语言,常用的语言比如C++, Java, Python,PHP, Ruby, Erlang,Perl,Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml都支持。 Thrift是一个典型的CS(客户端/服务端)结构,客户端和服务端可以使用不同的语言开发。既然客户端和服务端能使用不同的语言开发,那么一定就要有一种中间语言来关联客户端和服

BADAO_LIUMANG_QIZHI的博客 5025

thrift使用中的一些问题

1 TSimpleServer居然是单线程阻塞式server 2 thrift默认只能有一个service, args.processor(p1).processor(p2)只有最后一个起作用. thrift的文档真是不行啊 :?:

大神带我来搬砖 295

HBase thrift2

一、简介 Thrift server是HBase中的一种服务,主要用于对多语言API的支持。基于Apache Thrift(多语言支持的通信框架)开发,目前有两种版本thrift和thrift2。 thrift2是当时为了适应新的Java API,提出来的。由于种种原因,thrift2没有完美兼容并替代thrift,所有就留下了两个版本。 Thrift2没有DDL方面的接口,所以现在Hue还是用T...

bingoabin 3130

Thrift 代码分析

Thrift的基本结束 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过IDL(Interface Definition Language,接口定义语言)来定义RPC(Remote Procedure Call,远程过程调用)的接口和数据类型,然后通过thrift编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Co...

375

thrift笔记

【1】thirft 简介 【2】Thrift 与Dubbo 的区别 【1】thirft 简介 Thrift是一种接口描述语言和二进制通讯协议: 1.它被用来定义和创建跨语言的服务。 2.它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。 ###Thrift 协议栈 Thrift是一种c/s的架构体系。Server主要任务是高效的接受客户端请求,并将请求转发给Processor处理,最上层是用户自行实现的业务逻辑代码; Pr

shuangmu9768的博客 1万+

告别上位机!用MCGS触摸屏+FTP服务器,5分钟搞定工控机文件自动同步

本文介绍了一种工业自动化领域的高效解决方案,通过MCGS触摸屏结合FTP服务器实现工控机文件的自动同步,无需开发上位机软件。该方案特别适用于图像采集、参数同步、数据备份等场景,具有成本低、可靠性高、维护简便等优势。详细配置指南和实战案例帮助用户快速实现零代码文件同步。

weixin_30872499的博客 560

facebook/swift:构建thrift http server(3)--CORS跨域

在上一篇文章中我已经通过替换`frameCodec`为`HttpServerCodec`将`ThriftServer`改造为可以接收HTTP响应的netty server。完成代码修改后,赶紧用浏览器测试一下: 通过拦截到的这个已经解码成`DefaultHttpRequest`对象的HTTP请求,至少可以判断替换的`HttpServerCodec`编解码器已经生效了,但这第一个HTTP请求居然不是浏览器端发出的`POST`,而是我不认识的`OPTIONS`,何解?这就引出了XHR请求的另一个问题C

10km的专栏 1030

飞思卡尔16位单片机(二)——CodeWarrior开发环境搭建及新建、调试工程

一、安装CodeWarrior 飞思卡尔16位单片机的开发环境为CodeWarrior5.1,这个软件安装比较简单,软件的安装文件可以从相应的网站上下载。安装CodeWarrior所需要的电脑的硬件资源也比较宽泛,目前一般的电脑都可以满足这个要求,可以支持win10、win7等操作系统。安装过程按照按照软件的提示一步步操作即可。 二、安装USBDM驱动 USBDM是...

bigmarshal的博客 1万+

thrift/swift:服务端数据类型和client端数据类型之间的直接转换

需求描述 我们知道,thrift/swift框架中,服务端的数据类型与client的类型是相互独立的,比如服务端有一个ClassA类型,到了client端,同样也会生成一个同名的类。服务端和client相互通信时,client的 ClassA会被转成数据流(二进制或HTML或JSON…),通过网络传输到服务端,服务端收到数据流后再转换服务端的ClassA,反之亦然。这个过程是由thrift框架自...

10km的专栏 1777

标准高斯过程回归(Gaussian Processes Regression, GPR)从零开始,公式推导

标准高斯过程回归从零开始公式推导

qq_43587949的博客 1万+

【无人机路径规划】基于强化学习实现多无人机路径规划附matlab代码

1 简介 本文提出一种基于强化学习实现多无人机路径规划。​ 2 部分代码 % This is used to measure the path length, service rate and risk explosure for each UAVs %% parameters function [PL,ServiceRate,Risk]=measure global N2; % divide [0,1]*[0,1] map into N2*N2 grid when calcul

qq_59747472的博客 6905

thrift:swift项目笔记

先声明:此swift不是Apple公司的那个swift开发语言,而是facebook的另一个开源项目。 facebook的thrift IDL文件,如果默认用thrift -gen java生成java代码,代码十分冗长,大家可以先感受一下。一、IDL文件 service HelloService{ string ping() } 二、thrift命令生成的Hello...

weixin_33815613的博客 219

C# 零基础入门知识点汇总

本文属于C#零基础入门之百识百例系列目录文章。此系列文章已经完结,欢迎大家点击文中文章链接查看详情进行学习。

陈言必行 -- Unity游戏开发领域优质博主 5348

ubuntu下thrift的安装

一、ubuntu下thrift的安装 1.下载源代码 http://thrift.apache.org/download/ 下载最新版本thrift-0.8.0.tar.gz 2.安装boost库 sudo apt-get install libboost-dev libboost-dbg libboost-doc bcp libboost-*   3.安装其他相

小七 6307

大数据在电力行业的应用案例解析-【电力技术】(九)大数据在电力储能运维中的深度应用(含故障预测代码)

大数据技术为电力储能运维提供了“精准化、智能化、高效化”的解决方案,破解了传统运维的核心痛点,实现了储能系统从“被动抢修”到“主动运维”的转型,为新型电力系统建设提供了重要支撑。当前,随着储能产业的快速发展,大数据与储能运维的融合将更加深入,未来将结合人工智能、物联网、区块链等技术,实现储能运维的全流程智能化——从设备故障的提前预警,到寿命的精准预测,再到运维策略的自动优化、调度协同的实时响应,进一步提升储能系统的安全性、经济性与可靠性。

getusushu的博客 88

windows11下pycharm怎么完全卸载?完整卸载pycharm编辑器的教程

在卸载pycharm时都有遇到卸载不干净不完全的问题,那么具体怎样做才能完全卸载pycharm呢?退出所有的操作,重新启动电脑,会发现相关的软件已经被删除了。步骤1:卸载软件并删除安装目录。步骤2:删除相关的注册表。

拥抱具身智能,昇腾Ascend C 1万+

thrift注意点

https://blog.youkuaiyun.com/u010900754/article/details/801726711、thrift服务不支持重载。2、thrift文件名要小写(xxx.thrift)。3、可以include其他jar包中的thrift文件(include "user_rights_resp.thrift")4、maven中插件 <build> <plu...

wangpeng322的博客 1327

HTML粉色爱心(完整代码)

HTML语言实现粉色爱心的完整代码。

AIGC 1105

从Demo理解Thrift & Thrift和Dubbo的区别

从一个小demo操作理解RPC框架Thrift,并尝试给出其和另一款RPC框架Dubbo的区别

蒋大钊的博客 1509

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

PHP使用Thrift

0x00 Apache Thrift是一个跨语言的服务部署框架,通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(支持C++,Java,Python,PHP, GO,Javascript,Ruby,Erlang,Perl, Haskell, C#等),并由生成的代码负责RPC协议层和传输层的实现。 0x01 现在开始编写一个简单接IDL文...

稻草人技术博客 4401

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

thrift nginx php,关于php使用thrift做服务端开发的那些事

php使用thrift做服务端开发thrift采用接口描述语言定义和创建服务,用二进制格式传输数据,体积更小、效率更高,对于高并发、数据量大和多语言的环境有更好的支持。Apache Thrift是啥?Apache Thrift是FaceBook开发的一套可扩展的、跨语言的服务调用框架。简单的说就是先定义一个配置文件,不同的语言可以利用thrift基于这个配置文件生成各自语言的服务端,不管客户端用什...

weixin_31800911的博客 235

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Python使用Thrift

0x00 首先需要安装python的thrift包 sudo pip install thrift 0x01 编写一个简单接IDL文件helloworld.thrift const string HELLO_WORLD = "world" service HelloWorld { void ping(), string sayHello(), string sayMsg...

稻草人技术博客 9288

hbase的thrift接口(thrift与thrift2的对比)

一、概述 Hbase是目前比较火的列存储数据库,由于Hbase是用Java写的,因此它原生地提供了Java接口,对非Java程序人员,怎么办呢?幸好它提供了thrift接口服务器,因此也可以采用其他语言来编写Hbase的客户端,本文即是Hbase C++接口的介绍。 目前的Hbase(0.94.11,本文即基于此版本)有两套thrift接口(可以叫thrift1和thrift2),它们并不兼容(...

文武傲群雄,彳亍定江山 2914

Thrift系列之一:Thrift初步认识

 一. 与 Thrift 的初识 也许大多数人接触 Thrift 是从序列化开始的。每次搜索 “java序列化” + “方式”、“对比” 或 “性能” 等关键字时,搜索引擎总是会返回一大堆有关各种序列化方式的使用方法或者性能对比的结果给你,而其中必定少不了 Thrift,并且其性能还不错嘞,至少比那战斗力只有1的渣渣 java 原生序列化要强很多(好吧原谅我的小情绪……)。 然而,我最初接触 ...

z_xiaozhuT的博客 1289

hbase的thrift服务(thrift与thrift2)

一、概述 Hbase是目前比较火的列存储数据库,由于Hbase是用Java写的,因此它原生地提供了Java接口,对非Java程序人员,怎么办呢?幸好它提供了thrift接口服务器,因此也可以...

文武傲群雄,彳亍定江山 2075

简述thrift与应用分析

前言     本篇将以thrift-0.9.0为背景讲述thrift的基础,使用案例,启发。 概述   thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa,JavaScript, Node.js, Sma

chlaws的专栏 1万+
下一篇: rabbitmq的中流砥柱
@云师兄
博客等级 码龄10年 10粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值