Hyperlane: یک کتابخانه سرور HTTP با کارایی بالا و با کارایی بالا – جامعه Dev

در توسعه خدمات وب مدرن ، توسعه دهندگان به یک کتابخانه سرور HTTP سبک و با کارایی بالا نیاز دارند تا فرایند توسعه را در حالی که از عملکرد خدمات کارآمد استفاده می کنند ، ساده تر کنند. Hyperlane برای این منظور طراحی شده است-یک کتابخانه سرور Rust HTTP با هدف ارائه یک تجربه آسان و قدرتمند برای توسعه خدمات شبکه.
ویژگی های اصلی
Hyperlane نه تنها از تجزیه و تحلیل درخواست HTTP اساسی ، ایجاد پاسخ و ارتباطات TCP پشتیبانی می کند بلکه قابلیت های غنی را برای پاسخگویی به نیازهای توسعه خدمات وب وب ارائه می دهد:
- پشتیبانی واسطه: Hyperlane به توسعه دهندگان این امکان را می دهد تا به راحتی میانی نرم افزار را برای درخواست ها و پاسخ ها اضافه کنند و امکان پذیرش درخواست انعطاف پذیر و منطق تولید پاسخ را فراهم کنند.
- ارتباط در زمان واقعی: با پشتیبانی از رویدادهای WebSocket و Server-SENT (SSE) ، Hyperlane توسعه دهندگان را قادر می سازد تا برنامه های ارتباطی کارآمد در زمان واقعی ، اعم از برنامه های گپ ، فشار داده در زمان واقعی یا بازی های آنلاین ایجاد کنند.
- ساخت زنگ زدگی خالص: Hyperlane کاملاً با کتابخانه استاندارد Rust ساخته شده است و از ماهیت سبک وزن و سازگاری متقابل آن ، پشتیبانی از ویندوز ، لینوکس و MACOS و ارائه یک تجربه API مداوم در تمام سیستم عامل ها اطمینان حاصل می کند.
- زمان اجرا ناهمزمان: Hyperlane برای دستیابی به ارتباطات شبکه یکپارچه بدون نیاز به توسعه دهندگان برای رسیدگی به وابستگی های خاص پلتفرم ، به زمان اجرا ناهمزمان Tokio متکی است.
نصب و استفاده
نصب Hyperlane بسیار ساده است. فقط دستور زیر را در پروژه زنگ زدگی خود اجرا کنید:
cargo add hyperlane
برای کمک به شما در شروع سریع ، Hyperlane یک پروژه شروع سریع را ارائه می دهد. می توانید نمونه را با دستور زیر کلون کرده و اجرا کنید:
git clone https://github.com/eastspire/hyperlane-quick-start.git
در اینجا نمونه ای از ساختن یک سرور HTTP اساسی با استفاده از هایپریلن ، نشان دادن استفاده از میان افزار ، مسیریابی و WebSocket آورده شده است:
use hyperlane::*;
async fn request_middleware(ctx: Context) {
let socket_addr: String = ctx.get_socket_addr_or_default_string().await;
ctx.set_response_header(SERVER, HYPERLANE)
.await
.set_response_header(CONNECTION, CONNECTION_KEEP_ALIVE)
.await
.set_response_header(CONTENT_TYPE, content_type_charset(TEXT_PLAIN, UTF8))
.await
.set_response_header(DATE, gmt())
.await
.set_response_header("SocketAddr", socket_addr)
.await;
}
async fn response_middleware(ctx: Context) {
let _ = ctx.send().await;
let request: String = ctx.get_request_string().await;
let response: String = ctx.get_response_string().await;
ctx.log_info(&request, log_handler)
.await
.log_info(&response, log_handler)
.await;
}
async fn root_route(ctx: Context) {
ctx.set_response_status_code(200)
.await
.set_response_body("Hello hyperlane => /")
.await;
}
async fn websocket_route(ctx: Context) {
let request_body: Vec<u8> = ctx.get_request_body().await;
let _ = ctx.send_response_body(request_body).await;
}
#[tokio::main]
async fn main() {
let server: Server = Server::new();
server.host("0.0.0.0").await;
server.port(60000).await;
server.enable_nodelay().await;
server.log_dir("./logs").await;
server.enable_inner_log().await;
server.enable_inner_print().await;
server.log_size(100_024_000).await;
server.http_line_buffer_size(4096).await;
server.websocket_buffer_size(4096).await;
server.request_middleware(request_middleware).await;
server.response_middleware(response_middleware).await;
server.route("https://dev.to/", root_route).await;
server.route("/websocket", websocket_route).await;
let test_string: String = "Hello hyperlane".to_owned();
server
.route(
"/test/:text",
future_fn!(test_string, |ctx: Context| {
let param: RouteParams = ctx.get_route_params().await;
println_success!(format!("{:?}", param));
println_success!(test_string);
panic!("Test panic");
}),
)
.await;
server.run().await.unwrap();
}
مزایای عملکرد
Hyperlane به خصوص در سناریوهای با کنفرانس بالا و با بیان بالا عملکرد فوق العاده خوبی دارد. در اینجا داده های عملکرد بر اساس wrk
وت ab
ابزارهای معیار:
معیار WRK (360 همزمانی ، 60 ثانیه)
فرمان معیار:
wrk -c360 -d60s http://127.0.0.1:60000/
نتایج:
- توکی: 340،130.92 QPS
- چارچوب هایپریلن: 324،323.71 QPS
- چارچوب موشک: 298،945.31 QPS
- کتابخانه استاندارد زنگ زدگی: 291،218.96 QPS
- چارچوب جین: 242،570.16 QPS
- برو کتابخانه استاندارد: 234،178.93 QPS
- کتابخانه استاندارد گره: 139،412.13 QPS
معیار AB (1000 همزمانی ، 1 میلیون درخواست)
فرمان معیار:
ab -n 1000000 -c 1000 -r -k http://127.0.0.1:60000/
نتایج:
- توکی: 308،596.26 QPS
- چارچوب هایپریلن: 307،568.90 QPS
- چارچوب موشک: 267،931.52 QPS
- کتابخانه استاندارد زنگ زدگی: 260،514.56 QPS
- برو کتابخانه استاندارد: 226،550.34 QPS
- چارچوب جین: 224،296.16 QPS
- کتابخانه استاندارد گره: 85،357.18 QPS
معیار WRK (اتصال بسته ، 360 همزمانی ، 60 ثانیه)
فرمان معیار:
wrk -c360 -d60s -H "Connection: close" http://127.0.0.1:60000/
نتایج:
- چارچوب هایپریلن: 51،031.27 QPS
- توکی: 49،555.87 QPS
- چارچوب موشک: 49،345.76 QPS
- چارچوب جین: 40،149.75 QPS
- برو کتابخانه استاندارد: 38،364.06 QPS
- کتابخانه استاندارد زنگ زدگی: 30،142.55 QPS
- کتابخانه استاندارد گره: 28،286.96 QPS
معیار AB (بدون نگه داشتن ، 1000 همزمانی ، 1 میلیون درخواست)
فرمان معیار:
ab -n 1000000 -c 1000 -r http://127.0.0.1:60000/
نتایج:
- توکی: 51،825.13 QPS
- چارچوب هایپریلن: 51،554.47 QPS
- چارچوب موشک: 49،621.02 QPS
- برو کتابخانه استاندارد: 47،915.20 QPS
- چارچوب جین: 47،081.05 QPS
- کتابخانه استاندارد گره: 44،763.11 QPS
- کتابخانه استاندارد زنگ زدگی: 31،511.00 QPS
این داده ها حاکی از آن است که Hyperlane می تواند عملکرد نزدیک به Tokio را در محیط های با قشر بالا فراهم کند ، بسیار فراتر از سایر چارچوب های وب محبوب و پیاده سازی های استاندارد کتابخانه ، چه در اتصالات مداوم با ارتباطات فعال نگهدارنده باشد یا اتصالات کوتاه با اتصالات بسته.
سازگاری متقابل پلتفرم
یکی از اهداف طراحی Hyperlane ارائه پشتیبانی واقعی از پلتفرم است. مهم نیست که آیا شما در ویندوز ، لینوکس یا MACOS در حال توسعه هستید ، Hyperlane می تواند یک تجربه API مداوم و عملکرد پایدار را ارائه دهد. با تشکر از ویژگی های متقابل پلتفرم Rust و پشتیبانی قدرتمند از زمان اجرا ناهمزمان Tokio ، Hyperlane می تواند بدون قربانی کردن عملکرد ، به ارتباطات شبکه یکپارچه دست یابد.
جامعه و پشتیبانی
Hyperlane یک پروژه منبع باز است که در GitHub میزبان است و مستندات API آن در Docs.RS در دسترس است. ما از توسعه دهندگان استقبال و تشویق می کنیم تا مشارکت کنند. شما می توانید با ارسال مشکلات یا ایجاد درخواست های کشش ، به بهبود هایپریلن کمک کنید. اگر با هر مشکلی روبرو شدید یا در هنگام استفاده از سؤالاتی برخوردار هستید ، لطفاً با ما تماس بگیرید: root@ltpp.vip.
مجوز
Hyperlane تحت مجوز MIT مجوز دارد. برای اطلاعات دقیق ، لطفاً به پرونده مجوز مراجعه کنید.