Skip to content

A collection of lower-level libraries for composable network services.

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

actix/actix-net

Folders and files

NameName
Last commit message
Last commit date

Latest commit

e8a1664 · Dec 12, 2018
Dec 9, 2018
Dec 11, 2018
Dec 10, 2018
Dec 12, 2018
Dec 9, 2018
Dec 11, 2018
Dec 11, 2018
Oct 9, 2018
Aug 19, 2018
Dec 11, 2018
Dec 9, 2018
Aug 19, 2018
Dec 11, 2018
Aug 19, 2018
Aug 19, 2018
Dec 10, 2018
Nov 30, 2018

Repository files navigation

Actix net Build Status codecov crates.io Join the chat at https://gitter.im/actix/actix

Actix net - framework for composable network services (experimental)

Documentation & community resources

Example

fn main() {
    let sys = actix_rt::System::new("test");

    // 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.
    actix_server::build()
        .bind(
            // configure service pipeline
            "basic", "0.0.0.0:8443",
            move || {
                let num = num.clone();
                let acceptor = acceptor.clone();

                // service for converting incoming TcpStream to a SslStream<TcpStream>
                (move |stream| {
                SslAcceptorExt::accept_async(&acceptor, stream)
                    .map_err(|e| println!("Openssl error: {}", e))
            })
            // convert closure to a `NewService`
            .into_new_service()

            // .and_then() combinator uses other service to convert incoming `Request` to a `Response`
            // and then uses that response as an input for next service.
            // in this case, on success we use `logger` service
            .and_then(logger)

            // Next service counts number of connections
            .and_then(move |req| {
                let num = num.fetch_add(1, Ordering::Relaxed);
                println!("processed {:?} connections", num);
                future::ok(())
            })
        }).unwrap()
        .start();

    sys.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.