Jonathan Reem d00fc14765 Store Header Items behind an RWLock
This removes the need to receive `&mut self` in `get_ref` and `get.`

Since the interior mutability of the RWLock is needed only once,
it is safe to change the lifetime of the pointer given by read locks
as by then all mutation has been done.

Since `set` still requires `&mut self` there is no way to use the interior
mutability of the RWLock to modify an existing `&`-reference. However,
the use of interior mutability in `get_ref` means that `get_raw` is now
actually an unsafe operation because the (now `*const`) pointer could be
invalidated by a subsequent call to `get_ref.`

Fixes #47
2014-09-27 00:17:58 -04:00
2014-09-15 21:12:19 -07:00
2014-09-27 00:17:58 -04:00
2014-08-30 14:18:28 -07:00
2014-08-30 14:18:28 -07:00

hyper

Build Status

A Modern HTTP library for Rust.

Documentation

Overview

Hyper is a fast, modern HTTP implementation written in and for Rust. It is a low-level typesafe abstraction over raw HTTP, providing an elegant layer over "stringly-typed" HTTP.

Hyper offers both an HTTP/S client an HTTP server which can be used to drive complex web applications written entirely in Rust.

The documentation is located at http://hyperium.github.io/hyper.

Example

Hello World Server:

fn hello(mut incoming: Incoming) {
    for (_, mut res) in incoming {
        *res.status_mut() = status::Ok;
        let mut res = res.start().unwrap();
        res.write(b"Hello World!");
        res.end().unwrap();
    }
}

fn main() {
    let server = Server::http(Ipv4Addr(127, 0, 0, 1), 1337);
    server.listen(hello).unwrap();
}

Client:

fn main() {
    // Creating an outgoing request.
    let mut req = Request::get(Url::parse("http://www.gooogle.com/")).unwrap();

    // Setting a header.
    req.headers_mut().set(Foo);

    // Start the Request, writing headers and starting streaming.
    let res = req.start().unwrap()
        // Send the Request.
        .send().unwrap()
        // Read the Response.
        .read_to_string().unwrap()

    println!("Response: {}", res);
}

Scientific* Benchmarks

Client Bench:


running 3 tests
test bench_curl  ... bench:   1696689 ns/iter (+/- 540497)
test bench_http  ... bench:   2222778 ns/iter (+/- 1159060)
test bench_hyper ... bench:   1435613 ns/iter (+/- 359384)

test result: ok. 0 passed; 0 failed; 0 ignored; 3 measured

Mock Client Bench:

running 3 tests
test bench_mock_curl  ... bench:    329240 ns/iter (+/- 50413)
test bench_mock_http  ... bench:     61291 ns/iter (+/- 19253)
test bench_mock_hyper ... bench:     54458 ns/iter (+/- 15792)

test result: ok. 0 passed; 0 failed; 0 ignored; 3 measured

Server Bench:

running 3 tests
test bench_curl  ... bench:    234539 ns/iter (+/- 22228)
test bench_http  ... bench:    290370 ns/iter (+/- 69179)
test bench_hyper ... bench:    224482 ns/iter (+/- 95197)

test result: ok. 0 passed; 0 failed; 0 ignored; 3 measured

* No science was harmed in the making of this benchmark.

License

MIT

Description
No description provided
Readme MIT 6.5 MiB
Languages
Rust 94.5%
C 5.2%
Shell 0.3%