2020-01-28 14:36:35 +03:00
---
title: Connection Lifecycle
---
2024-05-28 20:23:34 +01:00
import MermaidDiagram from "@site/src/components/mermaid_diagram ";
import connection_overview from '!!raw-loader!@site/static/img/diagrams/connection_overview .mmd';
import connection_accept from '!!raw-loader!@site/static/img/diagrams/connection_accept .mmd';
import connection_worker from '!!raw-loader!@site/static/img/diagrams/connection_worker .mmd';
import connection_request from '!!raw-loader!@site/static/img/diagrams/connection_request .mmd';
2020-01-28 14:36:35 +03:00
# Architecture overview
2022-02-26 04:41:49 +00:00
After Server has started listening to all sockets, [`Accept` ][accept] and [`Worker` ][worker] are two main loops responsible for processing incoming client connections.
2020-01-28 14:36:35 +03:00
2022-02-26 04:41:49 +00:00
Once connection accepted Application level protocol processing happens in a protocol specific [`Dispatcher` ][dispatcher] loop spawned from [`Worker` ][worker].
2020-01-28 14:36:35 +03:00
Please note, below diagrams are outlining happy-path scenarios only.
2024-05-28 20:23:34 +01:00
< MermaidDiagram value = {connection_overview} / >
2020-01-28 14:36:35 +03:00
## Accept loop in more detail
2024-05-28 20:23:34 +01:00
< MermaidDiagram value = {connection_accept} / >
2020-01-28 14:36:35 +03:00
2022-02-26 04:41:49 +00:00
Most of code implementation resides in [`actix-server` ][server] crate for struct [`Accept` ][accept].
2020-01-28 14:36:35 +03:00
## Worker loop in more detail
2024-05-28 20:23:34 +01:00
< MermaidDiagram value = {connection_worker} / >
2020-01-28 14:36:35 +03:00
2022-02-26 04:41:49 +00:00
Most of code implementation resides in [`actix-server` ][server] crate for struct [`Worker` ][worker].
2020-01-28 14:36:35 +03:00
## Request loop roughly
2024-05-28 20:23:34 +01:00
< MermaidDiagram value = {connection_request} / >
2020-01-28 14:36:35 +03:00
2020-02-01 21:22:11 +01:00
Most of code implementation for request loop resides in [`actix-web` ][web] and [`actix-http` ][http] crates.
2020-01-28 14:36:35 +03:00
[server]: https://crates.io/crates/actix-server
[web]: https://crates.io/crates/actix-web
[http]: https://crates.io/crates/actix-http
2022-02-26 04:41:49 +00:00
[accept]: https://github.com/actix/actix-net/blob/master/actix-server/src/accept.rs
[worker]: https://github.com/actix/actix-net/blob/master/actix-server/src/worker.rs
[dispatcher]: https://github.com/actix/actix-web/blob/master/actix-http/src/h1/dispatcher.rs