rpc之thrift
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的更多相关文章
- RPC框架Thrift例子-PHP调用C++后端程序
更新 2016-02-22: Response对象不用主动创建. 前言 前段时间用了一下Facebook的开源RPC框架Thrift,做PHP客户端调用C++后端程序,真心觉得Thrift不错! 本文 ...
- HTTP与RPC(Thrift)
什么是RPC 从网络协议来说,Http协议与Rpc同属于应用层, 他们的底层都是tcp协议. RPC(即Remote Procedure Call,远程过程调用)和HTTP(HyperText Tra ...
- RPC学习----Thrift快速入门和Java简单示例
一.什么是RPC? RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. RPC协议 ...
- rpc框架: thrift/avro/protobuf 之maven插件生成java类
thrift.avro.probobuf 这几个rpc框架的基本思想都差不多,先定义IDL文件,然后由各自的编译器(或maven插件)生成目标语言的源代码,但是,根据idl生成源代码这件事,如果每次都 ...
- .Net RPC框架Thrift的用法
关于Thrift 下面是来自百度百科关于Thrift的介绍: thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和引擎,以构建在 C++, Java, Go ...
- rpc框架thrift
跨语言的rpc框架 新建一个thrift文件 # ping service demoservice PingService { string ping(), ping函数的返回类型是字符串} serv ...
- 【RPC】Thrift ICE 等 RPC 框架相关资料
RPC框架-Thrift-ICE Apache Thrift - Documentation Apache Thrift - Index of tutorial/ Apache Thrift - Ab ...
- Go -- RPC 之 Thrift
Thrift 简介: Thrift 是一款高性能.开源的 RPC 框架,产自 Facebook 后贡献给了 Apache,Thrift 囊括了整个 RPC 的上下游体系,自带序列化编译工具,因为 Th ...
- RPC之Thrift学习实战
关于Thrift的学习实战请参考:http://blog.csdn.net/column/details/slimina-thrift.html
随机推荐
- Foxmail 7.0破解版,拷贝到新机器后,发送邮件乱码问题
申请了新机器,挺开心,键盘和鼠标也好用了,但是新机器也随之而来一些不便,以前存储的数据需要重新拷贝.还有一些邮件,有些邮件标记了*号. Foxmail7.0绿色版本还挺好用,直接拷贝到新机器上就能直接 ...
- Entity Framework Code First+SQL Server,改变聚集索引,提高查询性能
.net Entity Framework(调研的是Entity Framework 4.0) code first方式生成数据库时,不能修改数据库表的索引,而SQLServer默认会把数据表的主键设 ...
- 【NOIP2015提高组】信息传递
https://www.luogu.org/problem/show?pid=2661 傻逼图论题,把我写成傻逼了. DFS找环,每个结点第二次访问时更新答案. 但是图会有几个连通块,所以要分开讨论. ...
- Windows下编译nginx-rtmp-module
http://nginx.org/en/docs/howto_build_on_win32.html 官网上的操作说明. 官网的方法Nginx编译方法,思路是一致的,只是有几个细节地方需要调整. 需要 ...
- JDBC详解系列(二)之加载驱动
---[来自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)--- 在JDBC详解系列(一)之流程中 ...
- PHP curl_setopt函数用法介绍
[导读] curl_setopt函数是php中一个重要的函数,它可以模仿用户的一些行为,如模仿用户登录,注册等等一些用户可操作的行为哦.bool curl_setopt (int ch, string ...
- 解决 PclZip 中文乱码问题
在使用 Pclzip 时出现无法压缩/解压文件的现象,追踪错误信息发现无法打开文件/文件夹.可是文件夹权限正确,打印文件路径之后发现是乱码. 出现这个问题的解决办法是windows下zip内的 ...
- CentOS7给终端配置快捷键【转发】
1.打开Applications,选择System Tools 2.选择Setting进入如下面界面,选择Keyboard 3.选择Keyboard,进入如下面界面,再点击Shortcuts 4.再点 ...
- cs231n --- 1:线性svm与softmax
cs231n:线性svm与softmax 参数信息: 权重 W:(D,C) 训练集 X:(N,D),标签 y:(N,1) 偏置量bias b:(C,1) N:训练样本数: D:样本Xi 的特征维度, ...
- MVC系列——一个异常消息传递引发的思考
前言:最近在某个项目里面遇到一个有点纠结的小问题,经过半天时间的思索和尝试,问题得到解决.在此记录一下解决的过程,以及解决问题的过程中对.net里面MVC异常处理的思考.都是些老生常谈的问题,不多说, ...