`
younglibin
  • 浏览: 1213838 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

thrift开发步骤

 
阅读更多

[三]、基本概念

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方法,用于监控,包括系统状态,请求次数等状态信息。

 

 

 

分享到:
评论

相关推荐

    Thrift开发环境配置1

    通过以上步骤,你就成功配置了Thrift的C++开发环境,并学会了如何使用Thrift进行服务开发。如果在过程中遇到问题,可以通过联系作者的QQ或邮箱寻求帮助。记得,理解和熟练使用Thrift的IDL语法以及自动生成的代码结构...

    thrift环境配置方法

    Thrift 是一个跨语言的 RPC 框架,由 Facebook 开发,用于建立高性能的服务之间的远程过程调用。为了使用 Thrift,需要配置好相关的环境,这篇文章将介绍 Thrift 环境配置的方法。 Thrift 环境配置的重要性 -------...

    thrift安装

    ### Thrift安装步骤 1. **下载Thrift源码** 首先,你需要从Thrift的官方网站或者通过Git克隆其源码仓库获取最新版本的Thrift。在本例中,我们使用的是`thrift-0.8.0`这个版本,你可以从Apache的发布页面下载对应的...

    thrift jar包及相关学习步骤

    标题“thrift jar包及相关学习步骤”意味着我们将探讨Thrift在Java环境中的应用,以及如何使用Thrift的jar包进行服务开发。Thrift的jar包通常包含编译器、运行时库和相关的工具,这些都对理解和使用Thrift至关重要。...

    thrift官方代码+与dubbo集成支持原生thrift协议

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年设计并发布,其目的是为了在各种编程语言之间提供高效的、轻量级的通信机制。Thrift通过定义一种中间表示(IDL,Interface Definition Language)来描述...

    C++(Qt)下的thrift的使用示例

    总的来说,“C++(Qt)下的thrift的使用示例”涵盖了在Qt环境下集成Thrift服务的基本步骤,包括安装依赖、编写IDL、生成代码、实现服务和客户端,以及利用Qt的特性来优化通信过程。理解并掌握这些知识,将有助于你在...

    Windows下QT使用Thrift的样例

    要集成QT、Thrift和Boost,开发者需要完成以下步骤: 1. 安装和配置QT:首先确保安装了QT 5.8.0,设置好环境变量,并在QT Creator中创建一个新的工程。 2. 添加Thrift依赖:下载并编译Thrift-0.10.0源码,生成C++...

    thrift_sasl-0.3.0.tar.gz

    7. **部署与集成**:了解如何在实际环境中部署Thrift SASL,包括设置SASL配置文件、配置Thrift服务以使用SASL以及客户端的适配,是使用此库的关键步骤。 8. **测试与调试**:在生产环境中使用Thrift SASL时,进行...

    thrift-Demo

    这个"thrift-Demo"应该是一个演示如何使用Thrift的实例,包含了一系列的步骤和文件,帮助初学者理解Thrift的工作原理和使用方法。 在Thrift中,我们首先需要创建一个`.thrift`文件,这个文件定义了服务的接口和数据...

    采用java操作thrift代码示例

    在Java开发中,Thrift是一种高效、跨语言的服务框架,由Facebook开源,现已被Apache基金会维护。Thrift通过定义一种中间表示(IDL,接口定义语言)来描述服务,然后自动生成对应语言的客户端和服务器端代码,使得...

    thrift-delphi实例

    同时,Thrift还具有良好的扩展性,可以方便地添加新的服务和数据类型,使得Delphi开发的系统能够无缝地与其他语言的系统进行交互。 总之,Thrift Delphi实例是一个极好的学习资源,它揭示了跨语言服务通信的核心...

    Thrift-0.5.exe

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开发并开源,后来成为Apache软件基金会的顶级项目。Thrift的主要目的是解决分布式系统中的通信问题,它允许开发者定义服务接口,并自动生成相应的客户端和...

    windows环境下thrift.exe的使用

    关于压缩包子文件`thriftTest.zip`,它可能包含了使用Thrift开发的一个示例项目。解压后,你可能会找到`.thrift`文件、生成的源代码以及测试用例。通过查看这些文件,可以更好地理解Thrift的工作原理和实际应用。 ...

    windows下vs2010编译的thrift,包含lib和cpp源码

    在Windows下使用VS2010编译Thrift涉及以下步骤: 1. 安装VS2010和必要的构建工具。 2. 下载Thrift源码,包括thrift-0.11.0版本。 3. 配置项目设置,指定编译目标为C++和Windows。 4. 修改和配置编译选项,确保与你...

    thrift在windows下生成C#代码

    在Windows环境下使用Thrift生成C#代码的过程主要分为以下几个步骤: 1. **安装Thrift编译器**: 首先,你需要下载Thrift编译器。压缩包中的`thrift-0.9.0.exe`是一个可执行文件,这表明你已经有了Thrift的Windows...

    MacOS10.6下编译安装Thrift的详细步骤

    Thrift是一个各种语言开发的中间连接件,是用Java开发的源码模组插件包 可以单独编译安装.可是很多时候 按照官方提供的步骤都是不成功的的. 更要命的问题是,官方采用了SVN自动文件更新服务,在编译过程中有自动连接SVN...

    Apache Thrift 使用说明

    Apache Thrift 是一款由 Facebook 开发的开源框架,主要用于构建跨语言的服务。Thrift 提供了一个集成的代码生成工具,允许开发者定义数据类型和服务接口,然后自动生成多种编程语言(如 C++ 和 Java)的客户端和...

    thrift-0.9.3.exe

    这个文件在Thrift开发过程中扮演着至关重要的角色,它能帮助开发者将定义好的Thrift接口文件(.thrift)转换为不同编程语言(如Java)的源代码。 Thrift的核心概念是定义一种中间表示(IDL,Interface Description ...

    thrift win7 安装与使用

    #### 五、开发步骤 ##### 第1步:编写`.thrift`文件 - 创建一个`.thrift`文件,定义服务接口。 ```thrift service Hello { void func1() } ``` - 将文件保存为`hello.thrift`。 ##### 第2步:生成目标语言...

    Thrift 示例代码_Java

    使用这些代码,开发者可以按照以下步骤进行服务开发: 1. **编写 IDL**:根据需求定义服务接口和数据类型。 2. **生成代码**:使用 Thrift 编译器将 IDL 转换为目标语言的代码。 3. **实现服务**:在生成的 Java 类...

Global site tag (gtag.js) - Google Analytics