Shio ist ein schnelles, einfaches und asynchrones Micro-Web-Framework für Rost.
Asynchron . Handler werden beide asynchron behandelt und können selbst asynchron sein. Ein shio::Handler erhält einen tokio_core::reactor::Handle , mit dem zusätzliche Arbeiten auf der Thread-Lokal-Ereignisschleife geplant werden können.
Multithread . Standardmäßig werden Anfragen von mehreren Threads behandelt, wobei jeweils eine von tokio betriebene Ereignisschleife ausgeführt wird.
Stabilität . Shio setzt sich voll und ganz für die Arbeit und arbeitet weiter an stabilen Rost.
[ dependencies ]
shio = " 0.2.0 " extern crate shio ;
use shio :: prelude :: * ;
fn hello_world ( _ : Context ) -> Response {
Response :: with ( "Hello World! n " )
}
fn hello ( ctx : Context ) -> Response {
Response :: with ( format ! ( "Hello, {}! n " , & ctx . get :: < Parameters > ( ) [ "name" ] ) )
}
fn main ( ) {
Shio :: default ( )
. route ( ( Method :: GET , "/" , hello_world ) )
. route ( ( Method :: GET , "/{name}" , hello ) )
. run ( ":7878" ) . unwrap ( ) ;
} Ein Anfragehandler ist ein Wert, der das shio::Handler -Merkmal implementiert.
Handler werden nicht auf jede Anfrage geklont und können daher einen Zustand enthalten. Beachten Sie, dass Felder Send + Sync werden müssen.
extern crate shio ;
use std :: thread ;
use std :: sync :: atomic :: { AtomicUsize , Ordering } ;
use shio :: prelude :: * ;
# [ derive ( Default ) ]
struct HandlerWithState {
counter : AtomicUsize ,
}
impl shio :: Handler for HandlerWithState {
type Result = Response ;
fn call ( & self , _ : Context ) -> Self :: Result {
let counter = self . counter . fetch_add ( 1 , Ordering :: Relaxed ) ;
Response :: with ( format ! (
"Hi, #{} (from thread: {:?}) n " ,
counter ,
thread :: current ( ) . id ( )
) )
}
}Viele weitere Verwendungsbeispiele/ sind in Shio enthalten.
Beispiele können mit cargo run -p <example name> ausgeführt werden. Zum Beispiel, um das hello -Beispiel auszuführen, verwenden Sie:
$ cargo run -p helloLizenziert unter einem von
nach Ihrer Option.
Sofern Sie nicht ausdrücklich anders angeben, ist ein Beitrag, der absichtlich zur Aufnahme in die Arbeit von Ihnen eingereicht wird, wie in der Lizenz Apache-2.0 definiert, ohne zusätzliche Bedingungen doppelt lizenziert wie oben.