通信杂谈
以下情形不进行考虑:
- 数据传输的可靠性
初代:
interface sender
queue transfer
interface handler
sender->transfer
transfer->handler
- sender发送二进制流
- handler 接收二进制流并进行处理
- transfer 传输介质
最早发现的问题:发送者和传输者都需要负责转换二进制流(语言不通)
二代(单核通信,解决通信语言问题)
使用同一套通讯协议
interface sender
control encoder
queue transfer
control decoder
interface handler
sender -> encoder
encoder->transfer
transfer->decoder
decoder->handler
encoder: 对发送者进行转码 使其发出去的流符合相应的格式 decoder:对发过来的流进行解析 翻译报文
优点: 开发人员不用再去关系二进制流转换问题,专注于处理业务逻辑, 最严重的问题:在这种模式下,一个receiver同一时刻只能处理一个sender
三代
为了提供更为强大的处理能力,决定部署更多的接收器
interface sender
control encoder
queue transfer
node dispatcher
node server1{
storage handler1
storage encode1
encode1 -> handler1
}
node server2{
storage handler2
storage encode2
encode2 -> handler2
}
sender -> encoder
encoder->transfer
transfer->dispatcher
dispatcher-(0)->server1
dispatcher-(0)->server2
四代(多核)
一个服务上可以处理多个进程
interface sender
control encoder
queue transfer
storage server{
node dispatcher
node processor1{
storage encode1
storage handler1
encode1 -> handler1
}
node processor2{
storage encode2
storage handler2
encode2 -> handler2
}
dispatcher-0->processor1:handler
dispatcher-0->processor2:handler
}
sender -> encoder: send
encoder -> transfer: transfer
transfer --> dispatcher: resolve
时序图
actor User as U
boundary Browser as B
boundary Dispatcher as D
boundary Codec as C
control Processor as P
U -> B: send request \n input https://api.weiling.qq.com/doc/
B -> D: encode HTTP Request \n GET /doc HTTP/1.1
D -> C: select usable Processor
C -> P: decode byte[] to ServerWebRequest
P --> C: handler ServerWebRequest \n and return ServerWebResponse
C --> D: encode ServerWebResponse \n HTTP\1.1 200 OK
D --> B: write stream to response
B --> U: render
类图
interface Dispatcher(){
dispatcher(Socket socket): void
}
interface Codec{
encode(byte[] bytes): ServerWebRequest
decode(ServerWebResponse response): byte[]
}
interface Processor{
handler(ServerWebRequest request): ServerWebResponse
}