参考:
http://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/
1 总图:
2 时序图:
2.1 服务端调用时序图:
程序调用了 TThreadPoolServer 的 serve 方法后,server 进入阻塞监听状态,其阻塞在 TServerSocket 的 accept 方法上。
当接收到来自客户端的消息后,服务器发起一个新线程处理这个消息请求,原线程再次进入阻塞状态。
在新线程中,服务器通过 TBinaryProtocol 协议读取消息内容,调用 HelloServiceImpl 的 helloVoid 方法,并将结果写入 helloVoid_result 中传回客户端。
2.2 Client调用时序图:
程序调用了 Hello.Client 的 helloVoid 方法,在 helloVoid 方法中,通过 send_helloVoid 方法发送对服务的调用请求,通过 recv_helloVoid 方法接收服务处理请求后返回的结果。
3 协议:
3.1 二进制
- TBinaryProtocol —— 二进制编码格式进行数据传输
- TCompactProtocol —— 高效率的、密集的二进制编码格式进行数据传输
3.2 文本
- TJSONProtocol —— 使用 JSON 的数据编码协议进行数据传输
- TSimpleJSONProtocol —— 只提供 JSON 只写的协议,适用于通过脚本语言解析
4 传输层:
- TSocket —— 使用阻塞式 I/O 进行传输,是最常见的模式
- TFramedTransport —— 使用非阻塞方式,按块的大小进行传输,类似于 Java 中的 NIO;若使用 TFramedTransport 传输层,其服务器必须修改为非阻塞的服务类型
- TNonblockingTransport —— 使用非阻塞方式,用于构建异步客户端
5 服务端类型:
- TSimpleServer —— 单线程服务器端使用标准的阻塞式 I/O
- TThreadPoolServer —— 多线程服务器端使用标准的阻塞式 I/O
- TNonblockingServer —— 多线程服务器端使用非阻塞式 I/O