Shio est un micro-travail de micro-web-frame pour rouille rapide, simple et asynchrone et asynchrone.
Asynchrone . Les gestionnaires sont tous deux manipulés de manière asynchrone et peuvent être asynchrones eux-mêmes. Un shio::Handler reçoit une tokio_core::reactor::Handle qui peut être utilisée pour planifier des travaux supplémentaires sur la boucle d'événement à thread-local.
Multithread . Par défaut, les demandes sont traitées par plusieurs threads, chacun exécutant une boucle d'événement alimentée par tokio .
Stabilité . Shio s'engage pleinement à travailler et à continuer à travailler sur la rouille stable .
[ 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 ( ) ;
} Un gestionnaire de demandes est une valeur qui implémente le trait shio::Handler .
Les gestionnaires ne sont pas clonés à chaque demande et peuvent donc contenir l'état. Notez que tous les champs doivent être Send + Sync .
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 ( )
) )
}
}Beaucoup plus d'exemples d'utilisation / sont inclus avec Shio.
Les exemples peuvent être exécutés avec cargo run -p <example name> . Par exemple, pour exécuter l'exemple hello , utilisez:
$ cargo run -p helloSous licence sous l'un ou l'autre des
à votre option.
À moins que vous ne soyez explicitement indiqué autrement, toute contribution intentionnellement soumise pour inclusion dans les travaux par vous, telle que définie dans la licence Apache-2.0, doit être autorisée à double licence comme ci-dessus, sans aucune condition supplémentaire.