ชิโอเป็นเว็บเฟรมไมโครที่รวดเร็วเรียบง่ายและอะซิงโครนัสสำหรับการเกิดสนิม
อะซิงโครนัส ตัวจัดการได้รับการจัดการ แบบอะซิงโครนัส และอาจเป็น แบบอะซิงโคร นัส shio::Handler ได้รับ tokio_core::reactor::Handle ซึ่งอาจใช้ในการกำหนดเวลางานเพิ่มเติมเกี่ยวกับการวนซ้ำของเธรดท้องถิ่น
มัลติเธรด โดยค่าเริ่มต้นคำขอจะถูกจัดการโดยหลายเธรดแต่ละรายการที่ใช้งานลูปเหตุการณ์ที่ขับเคลื่อนโดย 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 ( )
) )
}
}ตัวอย่างการใช้งานอีกมากมาย/ รวมอยู่ในชิโอ
ตัวอย่างอาจถูกเรียกใช้กับ cargo run -p <example name> ตัวอย่างเช่นในการเรียกใช้ตัวอย่าง hello ใช้:
$ cargo run -p helloได้รับใบอนุญาตภายใต้
ตามตัวเลือกของคุณ
เว้นแต่คุณจะระบุอย่างชัดเจนเป็นอย่างอื่นการมีส่วนร่วมใด ๆ ที่ส่งโดยเจตนาเพื่อรวมไว้ในงานโดยคุณตามที่กำหนดไว้ในใบอนุญาต Apache-2.0 จะได้รับใบอนุญาตคู่ดังกล่าวข้างต้นโดยไม่มีข้อกำหนดหรือเงื่อนไขเพิ่มเติมใด ๆ