75 lines
9.0 KiB
Plaintext
75 lines
9.0 KiB
Plaintext
──────▶ Channel
|
|
Legend:
|
|
━━━━━━▶ Service call
|
|
|
|
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
|
│ PeerServer │ │ PeerServer │ │ PeerServer │ │ PeerServer │
|
|
│ ┌───────┐ │ │ ┌───────┐ │ │ ┌───────┐ │ │ ┌───────┐ │
|
|
│ │┌─────┐│ │ │ │┌─────┐│ │ │ │┌─────┐│ │ │ │┌─────┐│ │
|
|
│ ││ Tcp ││ │ │ ││ Tcp ││ │ │ ││ Tcp ││ │ │ ││ Tcp ││ │
|
|
│ │└─────┘│───┼┐ │ │└─────┘│───┼┐ │ │└─────┘│───┼┐ │ │└─────┘│───┼┐
|
|
│ │Framed │ ││ │ │Framed │ ││ │ │Framed │ ││ │ │Framed │ ││
|
|
│ │Stream │ ││ │ │Stream │ ││ │ │Stream │ ││ │ │Stream │ ││
|
|
│ └───────┘ ││ │ └───────┘ ││ │ └───────┘ ││ │ └───────┘ ││
|
|
┏▶│ ┃ ││ ┏▶│ ┃ ││ ┏▶│ ┃ ││ ┏▶│ ┃ ││
|
|
┃ │ ┃ ││ ┃ │ ┃ ││ ┃ │ ┃ ││ ┃ │ ┃ ││
|
|
┃ │ ▼ ││ ┃ │ ▼ ││ ┃ │ ▼ ││ ┃ │ ▼ ││
|
|
┃ │ ┌───────┐ ││ ┃ │ ┌───────┐ ││ ┃ │ ┌───────┐ ││ ┃ │ ┌───────┐ ││
|
|
┃ │ │ Tower │ ││ ┃ │ │ Tower │ ││ ┃ │ │ Tower │ ││ ┃ │ │ Tower │ ││
|
|
┃ │ │Buffer │ ││ ┃ │ │Buffer │ ││ ┃ │ │Buffer │ ││ ┃ │ │Buffer │ ││
|
|
┃ │ └───────┘ ││ ┃ │ └───────┘ ││ ┃ │ └───────┘ ││ ┃ │ └───────┘ ││
|
|
┃ │ ┃ ││ ┃ │ ┃ ││ ┃ │ ┃ ││ ┃ │ ┃ ││
|
|
┃ └─────╋───────┘│ ┃ └─────╋───────┘│ ┃ └─────╋───────┘│ ┃ └─────╋───────┘│
|
|
┃ ┃ └─╋───────╋────────┴─╋───────╋────────┴─╋───────╋────────┴─┐
|
|
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │
|
|
┃ ┗━━━━━━━━━━╋━━━━━━━┻━━━━━━━━━━╋━━━━━━━┻━━━━━━━━━━╋━━━━━━━┻━━━━━━━━━━╋━┓
|
|
┃ ┃ ┃ ┃ │ ┃
|
|
┗━━━━━━━━┓ ┗━━━━━━━━┓ ┗━━━━━━━━┓ ┗━━━━━━━━┓ │ ┃
|
|
┌───────╋──────────────────╋──────────────────╋──────────────────╋───────┐ │ ┃
|
|
│ ┃ ┃ ┃ ┃ │ │ ┃
|
|
│┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐│ │ ┃
|
|
││ PeerClient │ │ PeerClient │ │ PeerClient │ │ PeerClient ││ │ ┃
|
|
│└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘│ │ ┃
|
|
│ │ │ ┃
|
|
│ PeerSet │ │ ┃
|
|
│ req: Request, rsp: Response │ │ ┃
|
|
│ routes all outgoing requests, adds peers to handle load │ │ ┃
|
|
└─────────────────────────────────────────────────────────┬──────────────┘ │ ┃
|
|
▲ │ │ ┃
|
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ ┃
|
|
┃ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━╋━┛
|
|
┃ ▼ │ │
|
|
┃ ┌────────────────────────────────┐ ┌────────────────────────────┐ │
|
|
┃ │ Router │ │ PeerDiscover │ │
|
|
┃ │ req: Request, rsp: Response │ │Discover<Service=PeerClient>│ │
|
|
┃ │ routes all incoming requests, │ │ │ │
|
|
┃ │ removes peers to shed load │ │ connects to a remote peer, │ │
|
|
┃ │ │ │ constructs client/server │ │
|
|
┃ │ │ └────────────────────────────┘ │
|
|
┃ │ │ ┃ ▲ │
|
|
┃ └────────────────────────────────┘ ┃ └─────┐ │
|
|
┃ ┃ ┃ │ │
|
|
┃ ┃ ┃ ┌───────────────┐ │
|
|
┃ ┃ ┃ │ PeerListener │ │
|
|
┃ ┃ ┃ │ req: ? │ │
|
|
┃ ┃ ┃ │rsp: PeerClient│ │
|
|
┃ ┃ ┃ └───────────────┘ │
|
|
┃ ┃ ┃ ┌───────────────┐ │
|
|
┃ ┃ ┃ │ PeerConnector │ │
|
|
┃ ┃ ┗━━━━▶│req: SocketAddr│ │
|
|
┃ ┃ │rsp: PeerClient│ │
|
|
┃ ┃ └───────────────┘ │
|
|
┃ ┃ ┃ │
|
|
┃ ┃ ▼ │
|
|
┃ ┃ ┌───────────────┐ │
|
|
┃ ┃ ┌───────────────┐ │ NextAddress │ │
|
|
┗━━━━━━━━━━━━━━━━━━━━━╋━━━━━│ AddrCrawler │─────────▶│ req: () │ │
|
|
┃ └───────────────┘ │rsp: SocketAddr│ │
|
|
┃ └───────────────┘ │
|
|
┃ ▲ │
|
|
┃ │ │
|
|
┃ ┌───────────────┐ ┌───────────────┐ │
|
|
┃ │ AddrService │ │ AddressBook │ │
|
|
┗━━━━▶│ req: GetPeers │◀─────────│ our per-peer │◀─┘
|
|
│ rsp: Peers │ │last-seen info │
|
|
└───────────────┘ └───────────────┘ |