1
0
mirror of https://github.com/actix/actix-website synced 2025-06-29 16:24:58 +02:00

Architecture diagrams of HttpServer and Connection lifecycle (#148)

* add arch diagrams and menu

* fix colors for arch diagrams

* refine architecture diagrams, ready for review

* capitalize titles and add mmdc instruction

* apply code review requested changes

* Add links to accept, worker and dispatcher too
This commit is contained in:
Maxim Vorobjov
2020-01-28 14:36:35 +03:00
committed by Yuki Okushi
parent 53214f4727
commit c1a8103cbc
14 changed files with 265 additions and 0 deletions

View File

@ -0,0 +1,42 @@
---
title: Connection Lifecycle
menu: docs_architecture
weight: 20
---
# Architecture overview
After Server has started listening to all sockets, [`Accept`][Accept] and [`Worker`][Worker] are two main loops responsible for processing incoming client connections.
Once connection accepted Application level protocol processing happens in a protocol specific [`Dispatcher`][Dispatcher] loop spawned from [`Worker`][Worker].
Please note, below diagrams are outlining happy-path scenarios only.
![](/img/diagrams/connection_overview.svg)
## Accept loop in more detail
![](/img/diagrams/connection_accept.svg)
Most of code implementation resides in [`actix-server`][server] crate for struct [`Accept`][Accept].
## Worker loop in more detail
![](/img/diagrams/connection_worker.svg)
Most of code implementation resides in [`actix-server`][server] crate for struct [`Worker`][Worker].
## Request loop roughly
![](/img/diagrams/connection_request.svg)
Most of code implementation for request loop resides in [`actix-web`][web] and [`actix-http`][http] crates.
[server]: https://crates.io/crates/actix-server
[web]: https://crates.io/crates/actix-web
[http]: https://crates.io/crates/actix-http
[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

View File

@ -0,0 +1,23 @@
---
title: Http Server Initialization
menu: docs_architecture
weight: 10
---
## Architecture overview
Below is a diagram of HttpServer initalization, which happens on the following code
```rust
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.route("/", web::to(|| HttpResponse::Ok()))
})
.bind("127.0.0.1:8088")?
.run()
.await
}
```
![](/img/diagrams/http_server.svg)