#network #framework #async #futures

actix-server

General purpose TCP server built for the Actix ecosystem

25 releases (5 stable)

new 1.0.4 Sep 12, 2020
1.0.3 May 19, 2020
1.0.2 Feb 26, 2020
1.0.1 Dec 29, 2019
0.1.3 Dec 21, 2018

#642 in Network programming

Download history 17719/week @ 2020-05-29 21232/week @ 2020-06-05 20666/week @ 2020-06-12 20705/week @ 2020-06-19 22508/week @ 2020-06-26 21982/week @ 2020-07-03 22625/week @ 2020-07-10 22683/week @ 2020-07-17 19655/week @ 2020-07-24 20315/week @ 2020-07-31 21563/week @ 2020-08-07 22510/week @ 2020-08-14 23262/week @ 2020-08-21 23981/week @ 2020-08-28 22434/week @ 2020-09-04 27077/week @ 2020-09-11

95,108 downloads per month
Used in 241 crates (12 directly)

MIT/Apache

295KB
8K SLoC

Actix net codecov Join the chat at https://gitter.im/actix/actix

Actix net - framework for composable network services

Build statuses

Platform Build Status
Linux build status
macOS build status
Windows build status
Windows (MinGW) build status

Documentation & community resources

Example

fn main() -> io::Result<()> {
    // load ssl keys
    let mut builder = SslAcceptor::mozilla_intermediate(SslMethod::tls()).unwrap();
    builder.set_private_key_file("./examples/key.pem", SslFiletype::PEM).unwrap();
    builder.set_certificate_chain_file("./examples/cert.pem").unwrap();
    let acceptor = builder.build();

    let num = Arc::new(AtomicUsize::new(0));

    // bind socket address and start workers. By default server uses number of
    // available logical cpu as threads count. actix net start separate
    // instances of service pipeline in each worker.
    Server::build()
        .bind(
            // configure service pipeline
            "basic", "0.0.0.0:8443",
            move || {
                let num = num.clone();
                let acceptor = acceptor.clone();

                // construct transformation pipeline
                pipeline(
                    // service for converting incoming TcpStream to a SslStream<TcpStream>
                    fn_service(move |stream: actix_rt::net::TcpStream| async move {
                        SslAcceptorExt::accept_async(&acceptor, stream.into_parts().0).await
                            .map_err(|e| println!("Openssl error: {}", e))
                    }))
                // .and_then() combinator chains result of previos service call to argument
                /// for next service calll. in this case, on success we chain
                /// ssl stream to the `logger` service.
                .and_then(fn_service(logger))
                // Next service counts number of connections
                .and_then(move |_| {
                    let num = num.fetch_add(1, Ordering::Relaxed);
                    println!("got ssl connection {:?}", num);
                    future::ok(())
                })
            },
        )?
        .run()
}

License

This project is licensed under either of

at your option.

Code of Conduct

Contribution to the actix-net crate is organized under the terms of the Contributor Covenant, the maintainer of actix-net, @fafhrd91, promises to intervene to uphold that code of conduct.

Dependencies

~4.5MB
~91K SLoC