远程过程调用框架-thrift基本使用

一、thrift介绍:

thrift是跨语言的远程调用开源框架,支持C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml等语言,支持无缝结合和高效服务。

thrift接口定义语言(IDL:Interface definition language):是thrift自己的一套接口定义语法,编写好接口定义文件后,通过thrift编译环境生成所需语言对应的接口文件,客户端和服务端分别使用自己需要的文件进行开发,实现rpc通讯。

二、接口定义文件示例USER.thrift:

service USER{
    string checkUser(1:string strCd,2:string strPwd);
    string getUserInfo(1:string strCd);
    string getUserList();
    string AddOneUser(1:string vstrCd,2:string vstrName,3:string vstrPwd,4:i32 role);
    string UpdateOneUser(1:string vstrCd,2:string vstrName,3:string vstrPwd,4:i32 role);
    string DelOneUsers(1:string vstrCd);
    string queryLog(1:string vstrT,2:string vstrLogType,3:string vstrServerType);
}

三、thrift支持的数据类型:

基本类型

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:为止编码文本或二进制字符串,对应java的String

结构体类型:

struct:定义公共的对象,类似于c语言中的结构体定义,在java中是一个javabean

集合类型:

list:对应java中的ArrayList

set:对应java中的HashSet

map:对应java中的HashMap

异常类型:

exception:对应java中的Exception

服务类型:

service:对应服务的类

四、数据传输层Transport:

Tsocket:使用阻塞式I/O进行传输,是最常见的模式

TFramedTransport:使用非阻塞方式,按快的大小进行传输,类似于java中的NIO,若使用TFramedTransport的传输层,其服务器必须修改为非阻塞式的服务类型

TNonblockingTransport:使用非阻塞方式,用于构建异步客户端

五、数据传输协议Protocol:

thrift可以让用户选择客户端与服务端之间的传输通信协议类别,在传输协议书行总体划分为文本和二进制传输协议,为节约带宽,提高传输效率,一般情况下使用二进制类型的传输协议,有事还会使用基于文本类型的协议,这需要根据实际需求进行选择。

常用协议有以下几种:

TBinaryProtocol:二进制格式

TCompactProtocol:高效率的、密集的二进制压缩格式

TJSONProtocol:JSON格式

TSimpleJSONProtocol:提供JSON只写协议,生成的文件很容易通过脚本语言解析

客户端和服务端协议要一致。

服务器类型Server:

TSimpleServer:单线程服务器端使用标准的的阻塞式I/O,一般用于测试。

TThreadPoolServer:多线程服务端,使用标准的阻塞式I/O,预先创建一组线程出力请求

TNonblockingServer:多线程服务端,使用非阻塞式I/O,服务端和客户端需要制定TFramedTransport数据传输方式。

THsHaServer:半同步半异步的服务端模型,需要制定TFramedTransport的传输方式

六、服务端:

使用命令生成java语言接口类:thrift --gen java USER.thrift

生成的接​​​​​​​口类示例:

接下来只需要实现接口类的各个接口即可完成服务端的开发:

七、客户端代码示例:

public class UserServerTest {
    public static final int SERVER_PORT = 33288;
    public static final String SERVER_IP = "127.0.0.1";
    public static com.bitc.tsd2020.server.USER.Client client;
    public static TTransport tTransport = null;
    public UserServerTest() {
        try {
            tTransport = new TSocket(SERVER_IP, SERVER_PORT);
            //协议要和服务端一致
            TProtocol protocol = new TBinaryProtocol(tTransport);
            client = new USER.Client(protocol);
            tTransport.open();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        try{
            UserServerTest userTest=new UserServerTest();
            System.out.println(client.checkUser("admin", "admin"));
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值