java 自习室 day18

这几天在学习rest、rpc和thrift框架,记录一下:

rest

Resource Representational State Transfer

URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。

看Url就知道要什么
看http method就知道干什么
看http status code就知道结果如何

rpc

Remote Procedure Call Protocol

把调用、编码/解码的过程封装起来,让用户像调用本地服务一样的调用远程服务

https://www.jianshu.com/p/2accc2840a1b

在这里插入图片描述

重要技术:序列化与反序列化

thrift

thrift协议栈

在这里插入图片描述
参考官方说明文档:http://thrift.apache.org/docs/concepts
参考:https://segmentfault.com/a/1190000014699502

+-------------------------------------------+
  | Server                                    |
  | (single-threaded, event-driven etc)       |
  +-------------------------------------------+
  | Processor                                 |
  | (compiler generated)                      |
  +-------------------------------------------+
  | Protocol                                  |
  | (JSON, compact etc)                       |
  +-------------------------------------------+
  | Transport                                 |
  | (raw TCP, HTTP etc)                       |
  +-------------------------------------------+

Transport

传输层用于完成网络的读写功能。以字节流的方式传输。例如,TSocket对应socket传输,TFileTransport对应文件传输。

一些方法:open,close,read,write,flush。

服务器端一般用ServerTransport接口。

一些方法:open,listen,accept,close。

Protocol

协议指定了数据类型如何使用底层传输来对自身进行编码/解码。包括json、xml、纯文本、紧凑二进制等。如int32会被TBinaryProtocol编码为一个4字节数据,或TBinaryProtocol从TTransport中取出4个字节数据解码为int32。

Processor

Processor封装了从输入流读取数据和往输出流写入数据的能力。流用Protocol对象表示。

processor负责对client的请求进行响应,包括rpc请求转发,调用参数解析和用户逻辑调用,返回值写回等处理步骤。processor是服务端从thrift框架转入用户逻辑的关键流程。processor同时也负责向消息结构中写入数据或读出数据。

特定于服务的处理器实现由编译器生成。 处理器基本上从线路中读取数据(使用输入协议),将处理委托给处理程序(由用户实现)并通过线路写入响应(使用输出协议)。

Server

服务层汇聚了以上所有功能:

  1. 创建一个传输
  2. 为传输创建输入/输出协议
  3. 根据输入/输出协议创建处理器
  4. 等待传入连接并将其交给处理器

TServer主要任务是高效地接受client的请求,特别是高并发请求的情况下快速完成请求。

核心库接口

TServer

  • TSimpleServer:单线程阻塞io
  • TThreadedServer:多线程阻塞io
  • TThreadPoolServer:多线程阻塞io,采用线程池
  • TNonBlockingServer:多线程非阻塞io

TTransprort

传输层只负责将字节流按顺序发送与接收,并不关心字节流本身的内容。

  • TSocket:阻塞TCP socket模式
  • THttpTransport:http传输协议
  • TFileTransport:文件传输
  • TZlibTransport:与其他transport组合使用,将收到的数据压缩、解压缩

TProtocol

协议层负责将字节流的数据转换成数据流。按照指定类型读取与写入数据。

  • TBinaryProtocol:二进制编码
  • TCompactProtocol:密集型二进制编码
  • TJSONProtocol:JSON数据编码协议
  • TSimpleJSONProtocol:JSON只写协议
  • TDebugProtocol:文本格式

TProcessor

TProcessor主要对TServer中一次请求的inputProtocol和outputProtocol进行操作,也就是从inputProtocol中读出client的请求数据,向outputProtocol写入用户逻辑的返回值。

ThriftClient

  1. send步骤,将用户的调用参数作为一个整体的struct写入TProtocol,并发送到TServer。
  2. send结束后,thriftClient便立即进入receive状态等待TServer的响应。对于TServer的响应,使用返回值解析类进行返回值解析,完成rpc调用。

下一篇打算写一下官网那个java的计算器例子。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值