通信杂谈

以下情形不进行考虑:

  • 数据传输的可靠性

初代:

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
}

参考