传输协议无关的架构
协议无关的三层架构
TSRPC 从一开始就被设计为 二进制 和 传输协议无关 的,这意味着你可以方便的将其扩展到原生 TCP、UDP 等其它传输协议中。 为了达到这一目的,TSRPC Server 设计为三层架构:
- Server:
Service的提供者- 基类是
BaseServer,根据实际传输协议派生出HttpServer、WsServer等。
- 基类是
- Connection:客户端与服务端的传输层连接,二进制的传输信道
- 基类是
BaseConnection,根据实际传输协议派生出HttpConnection、WsConection等。 - 在长连接下,你可以调用该对象下的
sendMsg()来直接向客户端发送消息。
- 基类是
- Call:客户端发起的一次服务调用,包含了客户端发送来的所有信息
- 基类
ApiCall代表对ApiService的调用,通过该对象来获取请求和返回响应。根据实际传输协议派生出ApiCallHttp、ApiCallWs等。 - 基类
MsgCall代表对MsgService的调用,通过该对象来获取 Message 内容。根据实际传输协议派生出MsgCallHttp、MsgCallWs等。
- 基类
了解它们的基类有助于你实现类型扩展,你对基类扩展的所有类型,会对子类也生效。
通常,我们希望实现的 API 接口及其它功能是跨协议的,即又能运行在 HTTP 协议,也能运行在 WebSocket 协议。
所以在 API 实现中,引用的不是 ApiCallHttp 或 ApiCallWs,而是它们协议无关的基类 ApiCall。
如果你的接口,只工作在 WebSocket 平台,那么你可以改为引用 ApiCallWs,从而可以获得 WebSocket 专属的一些控制。MsgCall、Connection 同理。
提示
一个 Connection 视其传输协议,可以有一个或多个 Call。例如HTTP 短连接只能承载单个 Call,而WebSocket 长连接可以同时收发多个 Call。
Service
TSRPC 可以提供的服务叫做 Service,分为两种:
ApiService:即 API 接口服务,基于请求 / 响应模式,只能由客户端发起请求,由服务端响应。MsgService:即 Message 消息服务,基于发布 / 订阅模式,可以在客户端和服务端之间双向发送消息。
备注
MsgService 的双向发送仅限于长连接(如 WebSocket)。
提示
它们的区别在于,ApiService 是保证可达的,无论服务端是否正确接收处理了消息,都会返回明确的响应或错误。
而 MsgService,单条 Message 是单方向发送,不需要返回,所以不保证对方已收到和正确处理(类似 UDP)。
总结
总结下来,TSRPC Server 主要负责服务的实现和对外提供,通过三层架构来实现协议无关的设计。 具体代码层面的使用方式,会在本节后续的文章中一一介绍。