Shio es un marco web de micro web rápido, simple y asincrónico para el óxido.
Asíncrono . Los manejadores se manejan asincrónicamente y pueden ser asincrónicos ellos mismos. Un shio::Handler recibe un tokio_core::reactor::Handle que puede usarse para programar trabajos adicionales en el bucle de eventos de hilo.
Multiproceso . De manera predeterminada, las solicitudes se manejan mediante múltiples subprocesos, cada una con un bucle de evento alimentado por tokio .
Estabilidad . Shio está totalmente comprometido con trabajar y continuar trabajando en óxido estable .
[ 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 controlador de solicitud es un valor que implementa el rasgo shio::Handler .
Los manejadores no están clonados en cada solicitud y, por lo tanto, pueden contener estado. Tenga en cuenta que cualquier campo debe ser 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 ( )
) )
}
}Muchos más ejemplos de uso/ están incluidos con Shio.
Los ejemplos se pueden ejecutar con cargo run -p <example name> . Por ejemplo, para ejecutar el ejemplo hello , use:
$ cargo run -p helloCon licencia bajo cualquiera de
a tu opción.
A menos que declare explícitamente lo contrario, cualquier contribución presentada intencionalmente para su inclusión en el trabajo por usted, como se define en la licencia Apache-2.0, se debe tener doble licencia como se indicó anteriormente, sin ningún término o condiciones adicionales.