Shio-это быстрая, простой и асинхронная микро-рама для ржавчины.
Асинхронно . Обработчики обрабатываются асинхронно и могут быть асинхронными . shio::Handler получает tokio_core::reactor::Handle , который может использоваться для планирования дополнительной работы на петле Thread-Local Event.
Многопоточный . По умолчанию запросы обрабатываются несколькими потоками, каждый из которых работает за циклом события, работающим на tokio .
Стабильность . Шио полностью привержен работе и продолжает работать над стабильной ржавчиной.
[ 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 ( ) ;
} Обработчик запроса - это значение, которое реализует черту shio::Handler .
Художники не клонируются по каждому запросу и, следовательно, могут содержать состояние. Обратите внимание, что любые поля должны быть 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 ( )
) )
}
}Многие другие примеры использования/ включены в Shio.
Примеры могут быть запускаются с cargo run -p <example name> . Например, чтобы запустить пример hello , используйте:
$ cargo run -p helloЛицензирован под одним из
на вашем варианте.
Если вы явно не заявляете иное, какой-либо вклад, преднамеренно предназначенный для включения в работу вами, как определено в лицензии Apache-2.0, должен быть двойной лицензией, как указано выше, без каких-либо дополнительных условий или условий.