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:
committed by
Yuki Okushi
parent
53214f4727
commit
c1a8103cbc
42
content/docs/conn_lifecycle.md
Normal file
42
content/docs/conn_lifecycle.md
Normal 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.
|
||||
|
||||

|
||||
|
||||
## Accept loop in more detail
|
||||
|
||||

|
||||
|
||||
Most of code implementation resides in [`actix-server`][server] crate for struct [`Accept`][Accept].
|
||||
|
||||
## Worker loop in more detail
|
||||
|
||||

|
||||
|
||||
Most of code implementation resides in [`actix-server`][server] crate for struct [`Worker`][Worker].
|
||||
|
||||
## Request loop roughly
|
||||
|
||||

|
||||
|
||||
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
|
23
content/docs/http_server_init.md
Normal file
23
content/docs/http_server_init.md
Normal 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
|
||||
}
|
||||
```
|
||||
|
||||

|
Reference in New Issue
Block a user