[三]、基本概念
1.数据类型
- 基本类型:
- bool:布尔值,true 或 false,对应 Java 的 boolean
- byte:8 位有符号整数,对应 Java 的 byte
- i16:16 位有符号整数,对应 Java 的 short
- i32:32 位有符号整数,对应 Java 的 int
- i64:64 位有符号整数,对应 Java 的 long
- double:64 位浮点数,对应 Java 的 double
- string:utf-8编码的字符串,对应 Java 的 String
- 结构体类型:
- struct:定义公共的对象,类似于 C 语言中的结构体定义,在 Java 中是一个 JavaBean
- 容器类型:
- list:对应 Java 的 ArrayList
- set:对应 Java 的 HashSet
- map:对应 Java 的 HashMap
- 异常类型:
- exception:对应 Java 的 Exception
- 服务类型:
- service:对应服务的类
2.服务端编码基本步骤:
- 实现服务处理接口impl
- 创建TProcessor
- 创建TServerTransport
- 创建TProtocol
- 创建TServer
- 启动Server
package service.demo; import org.apache.thrift.TProcessor; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TJSONProtocol; import org.apache.thrift.server.TThreadedSelectorServer; import org.apache.thrift.transport.TFramedTransport; import org.apache.thrift.transport.TNonblockingServerSocket; import org.apache.thrift.transport.TNonblockingServerTransport; import org.apache.thrift.transport.TTransportException; import org.apache.thrift.transport.TTransportFactory; import service.demo.thrift.Hello; public class HelloServiceServer2 { /** * 启动 Thrift 服务器 * * @param args */ public static void main(String[] args) { int port = 7912; try { TNonblockingServerTransport transport = new TNonblockingServerSocket( 7912); // 定义处理器 TProcessor processor = new Hello.Processor(new HelloServiceImpl()); // 定义传输工厂(默认使用的是:) TTransportFactory transportFactory = new TFramedTransport.Factory(); // 定义协议工厂(默认使用的是:TBinaryProtocol) TJSONProtocol.Factory protocol = new TJSONProtocol.Factory(); // 定义server参数对象 TThreadedSelectorServer.Args ttsargs = new TThreadedSelectorServer.Args( transport); // 指定该server使用 的 传输,传输协议,业务处理器 ttsargs.protocolFactory(protocol); ttsargs.transportFactory(transportFactory); ttsargs.processor(processor); TThreadedSelectorServer server = new TThreadedSelectorServer( ttsargs); // 启动server server.serve(); } catch (TTransportException e) { e.printStackTrace(); } } }
3.客户端编码基本步骤:
- 创建Transport
- 创建TProtocol
- 基于TTransport和TProtocol创建 Client
- 调用Client的相应方法
同步代码: // 设置调用的服务地址为本地,端口为 7911 TTransport transport = new TSocket("localhost", 7911); transport = new TFramedTransport(transport); transport.open(); // 设置传输协议为 TProtocol protocol = new TJSONProtocol(transport); Hello.Client client = new Hello.Client(protocol); // 调用服务的 helloVoid 方法 client.helloVoid(); //异步代码: TAsyncClientManager clientManager = new TAsyncClientManager(); TNonblockingSocket transport = new TNonblockingSocket("localhost", port, 500000); TJSONProtocol.Factory protocolFactory = new TJSONProtocol.Factory(); Hello.AsyncClient asycnClient = new Hello.AsyncClient( protocolFactory, clientManager, transport); MyCallback callback = new MyCallback(wait); asycnClient.helloString("libin", callback); synchronized (wait) { wait.wait(); } AsyncClient.helloString_call msg = callback.getResult(); System.out.println("================== async client msg = " + msg);
4.数据传输协议
- TBinaryProtocol : 二进制格式.
- TCompactProtocol : 压缩格式
- TJSONProtocol : JSON格式
- TSimpleJSONProtocol : 提供JSON只写协议, 生成的文件很容易通过脚本语言解析
tips:客户端和服务端的协议要一致
thrift里面常见的几种同步异步用法
thrift客户端与服务器之间同步异步的方法:
客户端-服务器 | 调用类型 | 同步服务器 | 异步服务器 | |
同步客户端 | 同步调用 | OK | OK | |
同步客户端 | 异步调用 | OK(不保证返回结果) | 待确认 | |
异步客户端 | --- | NO | OK |
默认使用的是:同步客户端,同步调用,同步服务器
同步客户端,异步调用 ,同步服务器: thrift框架保证传输到位,但应用不保证一定处理完成
需要注意的问题
1. Thrift生成的server端是thread safe的. 但是client端不是thread safe. 所以需要多个thread和server端通信,则每个thread需要initiate一个自己的client实例.
2. 如果服务器采用TNonblockingServer的话,客户端必须采用TFramedTransport。程序链接的时候需要thriftnb。
3. 默认TServerSocket和TSocket都设置了NoDelay为1,使得报文尽快发送出去,如果客户端和服务器间传输数据量较大,通过可以设置NoDelay为0来开启Nagel算法,缓存一段数据后再进行发送,减少报文数量。
TSocket默认开启了Linger,并设置linger time为0,这样close会丢弃socket发送缓冲区中的数据,并向对端发送一个RST报文,close不会被阻塞,立即返回。
TServerSocket默认关闭了Linger,close不会被阻塞,立即返回。
4. fb303作为handler的基类,里面预置了一些rpc方法,用于监控,包括系统状态,请求次数等状态信息。
3. 默认TServerSocket和TSocket都设置了NoDelay为1,使得报文尽快发送出去,如果客户端和服务器间传输数据量较大,通过可以设置NoDelay为0来开启Nagel算法,缓存一段数据后再进行发送,减少报文数量。
TSocket默认开启了Linger,并设置linger time为0,这样close会丢弃socket发送缓冲区中的数据,并向对端发送一个RST报文,close不会被阻塞,立即返回。
TServerSocket默认关闭了Linger,close不会被阻塞,立即返回。
4. fb303作为handler的基类,里面预置了一些rpc方法,用于监控,包括系统状态,请求次数等状态信息。
相关推荐
通过以上步骤,你就成功配置了Thrift的C++开发环境,并学会了如何使用Thrift进行服务开发。如果在过程中遇到问题,可以通过联系作者的QQ或邮箱寻求帮助。记得,理解和熟练使用Thrift的IDL语法以及自动生成的代码结构...
Thrift 是一个跨语言的 RPC 框架,由 Facebook 开发,用于建立高性能的服务之间的远程过程调用。为了使用 Thrift,需要配置好相关的环境,这篇文章将介绍 Thrift 环境配置的方法。 Thrift 环境配置的重要性 -------...
### Thrift安装步骤 1. **下载Thrift源码** 首先,你需要从Thrift的官方网站或者通过Git克隆其源码仓库获取最新版本的Thrift。在本例中,我们使用的是`thrift-0.8.0`这个版本,你可以从Apache的发布页面下载对应的...
标题“thrift jar包及相关学习步骤”意味着我们将探讨Thrift在Java环境中的应用,以及如何使用Thrift的jar包进行服务开发。Thrift的jar包通常包含编译器、运行时库和相关的工具,这些都对理解和使用Thrift至关重要。...
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年设计并发布,其目的是为了在各种编程语言之间提供高效的、轻量级的通信机制。Thrift通过定义一种中间表示(IDL,Interface Definition Language)来描述...
总的来说,“C++(Qt)下的thrift的使用示例”涵盖了在Qt环境下集成Thrift服务的基本步骤,包括安装依赖、编写IDL、生成代码、实现服务和客户端,以及利用Qt的特性来优化通信过程。理解并掌握这些知识,将有助于你在...
要集成QT、Thrift和Boost,开发者需要完成以下步骤: 1. 安装和配置QT:首先确保安装了QT 5.8.0,设置好环境变量,并在QT Creator中创建一个新的工程。 2. 添加Thrift依赖:下载并编译Thrift-0.10.0源码,生成C++...
7. **部署与集成**:了解如何在实际环境中部署Thrift SASL,包括设置SASL配置文件、配置Thrift服务以使用SASL以及客户端的适配,是使用此库的关键步骤。 8. **测试与调试**:在生产环境中使用Thrift SASL时,进行...
这个"thrift-Demo"应该是一个演示如何使用Thrift的实例,包含了一系列的步骤和文件,帮助初学者理解Thrift的工作原理和使用方法。 在Thrift中,我们首先需要创建一个`.thrift`文件,这个文件定义了服务的接口和数据...
在Java开发中,Thrift是一种高效、跨语言的服务框架,由Facebook开源,现已被Apache基金会维护。Thrift通过定义一种中间表示(IDL,接口定义语言)来描述服务,然后自动生成对应语言的客户端和服务器端代码,使得...
同时,Thrift还具有良好的扩展性,可以方便地添加新的服务和数据类型,使得Delphi开发的系统能够无缝地与其他语言的系统进行交互。 总之,Thrift Delphi实例是一个极好的学习资源,它揭示了跨语言服务通信的核心...
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开发并开源,后来成为Apache软件基金会的顶级项目。Thrift的主要目的是解决分布式系统中的通信问题,它允许开发者定义服务接口,并自动生成相应的客户端和...
关于压缩包子文件`thriftTest.zip`,它可能包含了使用Thrift开发的一个示例项目。解压后,你可能会找到`.thrift`文件、生成的源代码以及测试用例。通过查看这些文件,可以更好地理解Thrift的工作原理和实际应用。 ...
在Windows下使用VS2010编译Thrift涉及以下步骤: 1. 安装VS2010和必要的构建工具。 2. 下载Thrift源码,包括thrift-0.11.0版本。 3. 配置项目设置,指定编译目标为C++和Windows。 4. 修改和配置编译选项,确保与你...
在Windows环境下使用Thrift生成C#代码的过程主要分为以下几个步骤: 1. **安装Thrift编译器**: 首先,你需要下载Thrift编译器。压缩包中的`thrift-0.9.0.exe`是一个可执行文件,这表明你已经有了Thrift的Windows...
Thrift是一个各种语言开发的中间连接件,是用Java开发的源码模组插件包 可以单独编译安装.可是很多时候 按照官方提供的步骤都是不成功的的. 更要命的问题是,官方采用了SVN自动文件更新服务,在编译过程中有自动连接SVN...
Apache Thrift 是一款由 Facebook 开发的开源框架,主要用于构建跨语言的服务。Thrift 提供了一个集成的代码生成工具,允许开发者定义数据类型和服务接口,然后自动生成多种编程语言(如 C++ 和 Java)的客户端和...
这个文件在Thrift开发过程中扮演着至关重要的角色,它能帮助开发者将定义好的Thrift接口文件(.thrift)转换为不同编程语言(如Java)的源代码。 Thrift的核心概念是定义一种中间表示(IDL,Interface Description ...
#### 五、开发步骤 ##### 第1步:编写`.thrift`文件 - 创建一个`.thrift`文件,定义服务接口。 ```thrift service Hello { void func1() } ``` - 将文件保存为`hello.thrift`。 ##### 第2步:生成目标语言...
使用这些代码,开发者可以按照以下步骤进行服务开发: 1. **编写 IDL**:根据需求定义服务接口和数据类型。 2. **生成代码**:使用 Thrift 编译器将 IDL 转换为目标语言的代码。 3. **实现服务**:在生成的 Java 类...