rpc之thrift

一.介绍

  thrift是一个rpc(remove procedure call)框架,可以实现不同的语言(java、c++、js、python、ruby、c#等)之间的相互调用。是知名的社交网络公司facebook贡献出来,现有apache基金会负责维护的高效的rpc框架。是一种典型的C/S架构模式,我们可以定义一个IDL(Interface Definetion Language)文件,然后通过该文件可以生成对应语言的代码,然后在各语言之间就如同调用本地方法一样,相信之前有做过protobuf或者grpc开发的朋友对这种模式非常的熟悉,当然这种模式是几乎笔者所熟悉的所有的rpc框架都采用的方式。thrift非常使用于大型的且并发量很高的应用,至少在笔者曾经就职的公司的项目上没有出现过任何的性能瓶颈。

二.IDL文件的介绍以及编写

  在使用thrift的时候,最关键的部分就是编写IDL文件,首先需要给大家介绍的是thrift的数据类型: 

bool    布尔类型
byte 字节
i16 短整型
i32 整型
i64 长整型
double 浮点型
string 字符串

IDL文件定义:

namespace java com.test.netty.lesson9

typedef i16 short;
typedef i32 int;
typedef i64 long;
typedef string String;
typedef bool boolean; //定义结构
struct Person {
: optional String name;
: optional int age;
: optional boolean isMarried;
} //定义异常
exception DataException {
: optional String message;
: optional String callStack;
: optional String date;
} //定义服务
service PersonService {
Person getPersonByName(: required String name) throws (: DataException dataException);
void savePerson(: required Person person) throws (: DataException dataException);
}

三. 根据Idl文件生成对应代码的文件

   首先需要下载thrift,读者可以到官网查找对应系统的安装文件,然后再配置环境变量,windows下非常的简单,只需要将下载好的thrift.exe文件加入到path下就可以了。

   在命令行下执行命令:thrift  --gen java test.thrift

四.测试代码的编写

4.1 服务端代码

public class ThriftServer {
public static void main(String[] args) throws TTransportException { TNonblockingServerSocket socket = new TNonblockingServerSocket(8999); THsHaServer.Args arg = new THsHaServer.Args(socket).maxWorkerThreads(4).minWorkerThreads(2); PersonService.Processor<PersonServiceImpl> processor = new PersonService.Processor<>(new PersonServiceImpl()); arg.protocolFactory(new TCompactProtocol.Factory());
arg.transportFactory(new TFramedTransport.Factory());
arg.processorFactory(new TProcessorFactory(processor)); TServer server = new THsHaServer(arg); System.out.println("server begin started..."); server.serve();
}
}

4.2 客户端代码编写

public class ThriftClient {
public static void main(String[] args) {
TTransport transport = new TFramedTransport(new TSocket("localhost", 8999), 600); TProtocol protocol = new TCompactProtocol(transport); PersonService.Client client = new PersonService.Client(protocol); try {
transport.open();
Person person = client.getPersonByName("王五");
System.out.println(person.getAge() + ";;" + person.getName() + ";;" + person.isIsMarried()); Person p = new Person();
p.setAge(56);
p.setName("田七");
p.setIsMarried(false); client.savePerson(p); }catch (Exception e) {
e.printStackTrace();
}finally {
transport.close();
}
}
}

rpc之thrift的更多相关文章

  1. RPC框架Thrift例子-PHP调用C++后端程序

    更新 2016-02-22: Response对象不用主动创建. 前言 前段时间用了一下Facebook的开源RPC框架Thrift,做PHP客户端调用C++后端程序,真心觉得Thrift不错! 本文 ...

  2. HTTP与RPC(Thrift)

    什么是RPC 从网络协议来说,Http协议与Rpc同属于应用层, 他们的底层都是tcp协议. RPC(即Remote Procedure Call,远程过程调用)和HTTP(HyperText Tra ...

  3. RPC学习----Thrift快速入门和Java简单示例

    一.什么是RPC? RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. RPC协议 ...

  4. rpc框架: thrift/avro/protobuf 之maven插件生成java类

    thrift.avro.probobuf 这几个rpc框架的基本思想都差不多,先定义IDL文件,然后由各自的编译器(或maven插件)生成目标语言的源代码,但是,根据idl生成源代码这件事,如果每次都 ...

  5. .Net RPC框架Thrift的用法

      关于Thrift 下面是来自百度百科关于Thrift的介绍: thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和引擎,以构建在 C++, Java, Go ...

  6. rpc框架thrift

    跨语言的rpc框架 新建一个thrift文件 # ping service demoservice PingService { string ping(), ping函数的返回类型是字符串} serv ...

  7. 【RPC】Thrift ICE 等 RPC 框架相关资料

    RPC框架-Thrift-ICE Apache Thrift - Documentation Apache Thrift - Index of tutorial/ Apache Thrift - Ab ...

  8. Go -- RPC 之 Thrift

    Thrift 简介: Thrift 是一款高性能.开源的 RPC 框架,产自 Facebook 后贡献给了 Apache,Thrift 囊括了整个 RPC 的上下游体系,自带序列化编译工具,因为 Th ...

  9. RPC之Thrift学习实战

    关于Thrift的学习实战请参考:http://blog.csdn.net/column/details/slimina-thrift.html

随机推荐

  1. SpringCloud Feign使用详解

    添加依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId> ...

  2. ZOJ 2859 二维RMQ(模板)

    这题求范围最小值,RMQ正好是用来解决这方面的.所以再适合只是了,又是离线静态输入输出的,所以时间比二维线段树快. #include<iostream> #include<cstdi ...

  3. hdu 5078 Osu! (2014 acm 亚洲区域赛鞍山 I)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5078 Osu! Time Limit: 2000/1000 MS (Java/Others)     ...

  4. Elasticsearch和MongoDB分片及高可用对比

    本文旨在对比Elasticsearch和MongoDB高可用和分片的实现机制. Elasticsearch ES天生就是分布式的,那她又是如何做到天生分布式的? 通过ES官方指南我们可以知道: 一个运 ...

  5. MVC(二)

    一: 在新接触MVC的时候可以先使用VS建一个MVC项目(不是空项目哟),MVC特别人性化的建一个示例,展示了MVC项目的基本组成.如下: App_Data 数据库文件,需根据数据库变动而变更. Ap ...

  6. 一个Web前端自学者的自述

    想来想去还是写下这篇文章,先说明,我精通JAVA编程语言和web前端常见的技术,个人是做JAVA的多,但是更加喜欢前端.因为我从高一开始接触JAVA,家父是黑马的JAVA讲师,自己对编程很热爱,在大学 ...

  7. 使用soap实现简单webservice

    在网上看到一些关于用soap实现简单webservice的一些知识,简单整理一下希望对大家有所帮助. 可以给大家看一下我的简单实现的列子,Soap,大家可以到Github上自行下载. 首先说一下web ...

  8. Java IO学习要点导图

    Java IO的一些基础知识: 导图源文件保存地址:https://github.com/wanghaoxi3000/xmind

  9. bzoj 3670: [Noi2014]动物园

    Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习 ...

  10. node.js stream

    stream是一个接口,流是可以从一个读取或写入数据的目标对象 ,Node 中有很多对象实现了这个接口   一.nodejs stream类型 1. Readable - 可读操作. Writable ...