Restinio เป็นไลบรารี C ++ 17 ที่ให้เซิร์ฟเวอร์ HTTP/WebSocket แบบฝังตัว มันขึ้นอยู่กับ ASIO รุ่นสแตนด์อโลนและเป้าหมายเป็นหลักสำหรับการประมวลผลแบบอะซิงโครนัสของ HTTP-Requests Boost :: ASIO ได้รับการสนับสนุน
Restinio เองเป็นไลบรารีส่วนหัวเท่านั้น แต่ขึ้นอยู่กับ NodeJS/LLHTTP ที่ไม่ใช่ส่วนหัวเท่านั้น
ปัจจุบัน Restinio อยู่ในสถานะค่อนข้างมั่นคงและเราคิดว่าตั้งแต่ V.0.4.0 มันพร้อมสำหรับการใช้งานการผลิต
พิจารณางานของการเขียนแอปพลิเคชัน C ++ ที่ต้องสนับสนุน REST API บางส่วน Restinio แสดงถึงการแก้ปัญหาของเราสำหรับงานนั้น
มาดูกันว่ามันรู้สึกอย่างไรในกรณีที่ง่ายที่สุด:
# include < restinio/core.hpp >
int main ()
{
restinio::run (
restinio::on_this_thread ()
. port ( 8080 )
. address ( " localhost " )
. request_handler ([]( auto req) {
return req-> create_response (). set_body ( " Hello, World! " ). done ();
}));
return 0 ;
}เซิร์ฟเวอร์ทำงานบนเธรดหลักและตอบสนองต่อคำขอทั้งหมดด้วยข้อความ Hello-World แน่นอนว่าคุณสามารถเข้าถึงโครงสร้างของคำขอ HTTP ที่กำหนดได้ดังนั้นคุณสามารถใช้ตรรกะที่ซับซ้อนสำหรับการจัดการคำขอ
# include < restinio/core.hpp >
using namespace restinio ;
template < typename T>
std::ostream & operator <<(std::ostream & to, const optional_t <T> & v) {
if (v) to << *v;
return to;
}
int main () {
// Create express router for our service.
auto router = std::make_unique<router:: express_router_t <>>();
router-> http_get (
R"( /data/meter/:meter_id(d+) )" ,
[]( auto req, auto params) {
const auto qp = parse_query (req-> header (). query ());
return req-> create_response ()
. set_body (
fmt::format ( " meter_id={} (year={}/mon={}/day={}) " ,
cast_to< int >(params[ " meter_id " ]),
opt_value< int >(qp, " year " ),
opt_value< int >(qp, " mon " ),
opt_value< int >(qp, " day " )))
. done ();
});
router-> non_matched_request_handler (
[]( auto req){
return req-> create_response ( restinio::status_not_found ()). connection_close (). done ();
});
// Launching a server with custom traits.
struct my_server_traits : public default_single_thread_traits_t {
using request_handler_t = restinio::router:: express_router_t <>;
};
restinio::run (
restinio::on_this_thread<my_server_traits>()
. address ( " localhost " )
. request_handler ( std::move (router)));
return 0 ;
}Restinio มีการแจกจ่ายภายใต้ใบอนุญาต BSD-3-Clause
เอกสารฉบับเต็มสำหรับ Restinio สามารถพบได้ที่นี่