thrift中protocol主要负责的是将message写入transport的过程。这一部分并不包含java的POJO和各个协议的转换,而只是提供写入transport的接口。具体的调用是放在生成的service类中的。

TJSONProtocol

以json格式读写数据

TSimpleJSONProtocol

json格式的一个简单实现,但是没有提供读的功能

TBinaryProtocol

以二进制格式进行输入读取

TCompactProtocol

这个格式会对数据进行压缩,它会沿用构造函数传入的protocol部分输出/读取格式,但会对数据进行压缩,如整数会被转换成zigzap的表示形式、将布尔型的值压缩在类型的msb

TProtocolDecorator

纯装饰器protocol,其实现TMultiplexedProtocol是用于进行消息多路复用时使用的

     TSocket transport = new TSocket("localhost", 9090);
     transport.open();

     TBinaryProtocol protocol = new TBinaryProtocol(transport);

     TMultiplexedProtocol mp = new TMultiplexedProtocol(protocol, "Calculator");
     Calculator.Client service = new Calculator.Client(mp);

     TMultiplexedProtocol mp2 = new TMultiplexedProtocol(protocol, "WeatherReport");
     WeatherReport.Client service2 = new WeatherReport.Client(mp2);

     System.out.println(service.add(2,2));
     System.out.println(service2.getTemperature());

其是通过在message的name上加上构造函数的第二个入参MessageName来实现的。在服务端需要使用TMultiplexedProcessor来进行消息接受