You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
mike@mike-Vostro-3653:~/works2/wrk$ uname -a
Linux mike-Vostro-3653 4.10.0-21-generic #23-Ubuntu SMP Fri Apr 28 16:14:22 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
mike@mike-Vostro-3653:~/works2/wrk$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 94
model name : Intel(R) Core(TM) i3-6100 CPU @ 3.70GHz
cpu MHz : 832.183
cache size : 3072 KB
bogomips : 7392.00
...
mike@mike-Vostro-3653:~/works2/sapper/examples/tiny$ cargo run --release
Finished release [optimized] target(s) in 36.27 secs
Running `target/release/tiny`
Listening on https://127.0.0.1:1337
output: hello, world!
mike@mike-Vostro-3653:~/works2/wrk$ ./wrk -t2 -c100 -d30s https://127.0.0.1:1337
Running 30s test @ https://127.0.0.1:1337
2 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 21.73us 139.92us 16.02ms 99.87%
Req/Sec 235.94k 26.75k 259.73k 76.33%
7045973 requests in 30.04s, 598.04MB read
Requests/sec: 234536.10
Transfer/sec: 19.91MB
Features
Sapper supplies only basic framework;
Three level granularity (global, module, function handler) middleware controller and unified middleware presentation;
Typesafe abstraction, keep the same spirit with hyper;
For easy using, will supply some convenient macros to help write business logics;
Global object cross requests;
Philosophy
Typed, hierarchical control, and middlewares.
Typed
In Sapper, nearly every important thing is a Type. They are:
Each module is a type, different modules are different types;
Every middleware supplies some (0 to n) types for handler getting values;
Inherited from hyper's typed spirit, all headers, mime and so on should use types for manipulation.
Hierarchical Control
Sapper forces you to put router in each module (in main.rs, you can not write it, no space left for you to write);
Sapper forces you to seperate the router binding and the handler realization;
Sapper's plugin processor can be used in app level wrapper, module level wrapper, and each handler. These three level hierarchical controls make it flexible to construct your business.
Middlewares
Sapper's core contains only router system, request and response definitions, middleware system, and some other basic facilities. Nearly all practical features, such as query parameter, body parameter, cookie, session, json, xml, orm..., are supplied by the corresponding middlewares.
Sapper's middleware is very easy to write. One rust module realized a function on the prototype of
fn(&mutRequest) -> Result<()>;// before pluginfn(&Request,&mutResponse) -> Result<()>;// after plugin
can be thought as Sapper's middleware. Sample middleware: sapper_query.