This repository has been archived on 2022-09-21. You can view files and clone it, but cannot push or open issues or pull requests.
simplexmq/design/server.gv

58 lines
2.0 KiB
Plaintext

digraph SMPServer {
graph [fontname=arial]
node [fontname=arial fontsize=11 shape=box]
edge [fontname=arial fontsize=10 arrowhead=open arrowtail=open]
subgraph clusterPersistence {
label="persistence (STM)"
msgQueues [shape=cylinder label="Message\nqueues"]
queueStore [shape=cylinder label="SMP queue\nrecords"]
}
subgraph clusterServer {
label="server threads"
main [shape=hexagon color=orange label="main\nthread"]
ss [label="server TCP socket" color=blue]
subgraph clusterThreads {
label=""
node [shape=hexagon color=orange]
runClient [label="runClient\nthread"]
server [label="server\nthread"]
}
subscribedQ [shape="larrow" label="subscribed\nTBQueue"]
main -> {server runClient} [style=dashed label=race color=orange fontcolor=orange]
ss -> runClient [color=blue]
subscribedQ -> server
}
subgraph clusterConnection {
label="1 group per client connection"
cs [label="client connection TCP socket" color=blue]
subgraph clusterThreads {
node [shape=hexagon, color=orange]
label=""
receive [label="receive\nthread"]
client [label="client\nthread"]
send [label="send\nthread"]
}
runClient -> cs [style=dashed label="connect" color=blue fontcolor=blue]
runClient -> {client receive send} [style=dashed label=race color=orange fontcolor=orange]
server -> inq [label="END"]
subscriber [shape=hexagon color=orange label="subscriber\nthread"]
inq [shape=rarrow label="receive\nTBQueue"]
outq [shape=larrow label="send\nTBQueue"]
cs -> receive -> inq -> client [color=blue]
msgQueues -> subscriber [label="Message" color=green fontcolor=green]
subscriber -> outq [label="MSG" color=blue fontcolor=blue constraint=false]
client -> queueStore [dir=both]
client -> subscriber [style=dashed label="1 fork per\nSMP queue" color=orange]
client -> msgQueues [dir="both" label="SEND,\nSUB,\nACK" color=green]
client -> outq -> send -> cs [color=blue]
client -> subscribedQ [label="(rId, Client)"]
}
}