Shio adalah ringkasan web mikro yang cepat, sederhana, dan asinkron untuk karat.
Asinkron . Penangan keduanya ditangani secara asinkron dan mungkin tidak sinkron sendiri. A shio::Handler menerima tokio_core::reactor::Handle yang dapat digunakan untuk menjadwalkan pekerjaan tambahan pada loop peristiwa thread-lokal.
Multithreaded . Secara default, permintaan ditangani oleh beberapa utas, masing -masing menjalankan loop acara yang ditenagai oleh tokio .
Stabilitas . Shio berkomitmen penuh untuk bekerja dan terus bekerja pada karat yang stabil .
[ 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 ( ) ;
} Penangan permintaan adalah nilai yang mengimplementasikan sifat shio::Handler .
Penangan tidak dikloning pada setiap permintaan dan karenanya dapat berisi keadaan. Perhatikan bahwa setiap bidang harus 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 ( )
) )
}
}Lebih banyak contoh penggunaan/ disertakan dengan Syio.
Contohnya dapat dijalankan dengan cargo run -p <example name> . Misalnya, untuk menjalankan contoh hello , gunakan:
$ cargo run -p helloBerlisensi di bawah salah satu dari
di pilihan Anda.
Kecuali jika Anda secara eksplisit menyatakan sebaliknya, kontribusi apa pun secara sengaja diserahkan untuk dimasukkan dalam pekerjaan oleh Anda, sebagaimana didefinisikan dalam lisensi APACHE-2.0, harus dilisensikan ganda seperti di atas, tanpa syarat atau ketentuan tambahan.