Netty整合thrift通讯,java与pathon通讯

本文介绍了如何使用Thrift进行Java与Python之间的跨语言通讯。Thrift是一个跨语言的服务框架,通过IDL定义RPC接口和数据类型,并自动生成不同语言的代码。内容包括Thrift的架构、协议层、传输层、服务模型,以及在Java和Python中创建服务和客户端的步骤。在实践中,由于Python和Java对TCPV6的支持差异,可能需要修改主机地址为'127.0.0.1'以解决通讯问题。
摘要由CSDN通过智能技术生成

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#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。
在这里插入图片描述
图中,TProtocol(协议层),定义数据传输格式,例如:

  1. TBinaryProtocol:二进制格式;
  2. TCompactProtocol:压缩格式;
  3. TCompactProtocol:压缩格式;
  4. TJSONProtocol:JSON格式;
  5. TSimpleJSONProtocol:提供JSON只写协议, 生成的文件很容易通过脚本语言解析;
  6. TDebugProtocol:使用易懂的可读的文本格式,以便于debug

TTransport(传输层),定义数据传输方式,可以为TCP/IP传输,内存共享或者文件共享等)被用作运行时库。

  1. TSocket:阻塞式socker;
  2. TFramedTransport:以frame为单位进行传输,非阻塞式服务中使用;
  3. TFileTransport:以文件形式进行传输;
  4. TMemoryTransport:将内存用于I/O,java实现时内部实际使用了简单的ByteArrayOutputStream;
  5. TZlibTransport:使用zlib进行压缩, 与其他传输方式联合使用,当前无java实现;

Thrift支持的服务模型

  1. TSimpleServer:简单的单线程服务模型,常用于测试;
  2. TThreadPoolServer:多线程服务模型,使用标准的阻塞式IO;
  3. TNonblockingServer:多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式);
  4. THsHaServer:THsHaServer引入了线程池处理去处理,把、其模型把读写任务翻到线程池去处理,Half-sync/Half-async的处理模式,Half-async是处理在处理io事件上,Half-sync用于handle对应rpc的同步处理。

Thrift实际上是实现了C/S模式,通过代码生成工具将thrift文生成服务器端和客户端代码(可以为不同语言),从而实现服务端和客户端跨语言的支持。用户在Thirft文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后客户端调用服务,服务器端提服务便可以了。

需要安装thrift,这里就不进行安装了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值