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来进行消息接受