我正在尝试实现一个rocket.rs路由,它允许我从服务器通知客户机。
下面是我正在测试的最小示例:
use rocket::response::stream::Event;
use std::time::Duration;
use rocket::response::stream::EventStream;
#[macro_use] extern crate rocket;
#[get("/test/<id>")]
async fn test_route(id: String) -> EventStream![] {
EventStream! {
let mut interval = rocket::tokio::time::interval(Duration::from_secs(1));
loop {
yield Event::data(id.clone());
interval.tick().await;
}
}
}
#[launch]
fn rocket() -> _ {
rocket::build()
.mount("/", routes![test_route])
}
在测试过程中,我注意到服务器最多只能响应6个(这很奇怪,因为我有8+8个内核,应该有24个工作线程)同时请求。超过这个限制的所有请求都将无限加载,直到我杀死另一个请求才得到任何响应。
下面是服务器的输出:
Configured for debug.
>> address: 127.0.0.1
>> port: 8000
>> workers: 24
>> ident: Rocket
>> limits: bytes = 8KiB, data-form = 2MiB, file = 1MiB, form = 32KiB, json = 1MiB, msgpack = 1MiB, string = 8KiB
>> temp dir: C:\Users\bened\AppData\Local\Temp\
>> http/2: true
>> keep-alive: 5s
>> tls: disabled
>> shutdown: ctrlc = true, force = true, grace = 2s, mercy = 3s
>> log level: normal
>> cli colors: true
Routes:
>> (test_route) GET /test/<id>
Fairings:
>> Shield (liftoff, response, singleton)
Shield:
>> Permissions-Policy: interest-cohort=()
>> X-Frame-Options: SAMEORIGIN
>> X-Content-Type-Options: nosniff
Rocket has launched from http://127.0.0.1:8000
GET /test/echo text/html:
>> Matched: (test_route) GET /test/<id>
>> Outcome: Success
GET /test/echo text/html:
>> Matched: (test_route) GET /test/<id>
>> Outcome: Success
GET /test/echo text/html:
>> Matched: (test_route) GET /test/<id>
>> Outcome: Success
GET /test/echo text/html:
>> Matched: (test_route) GET /test/<id>
>> Outcome: Success
GET /test/echo text/html:
>> Matched: (test_route) GET /test/<id>
>> Outcome: Success
GET /test/echo text/html:
>> Matched: (test_route) GET /test/<id>
>> Outcome: Success
这仅仅是火箭的极限还是我的实现中有错误?我期望异步流能够服务于无限(或可配置)数量的同时请求。
1条答案
按热度按时间kgsdhlau1#
原来这不是火箭或我的实现的限制。
我测试了它能同时响应多少个请求,只需要在google chrome中打开路由,我用chrome的多个示例测试,每个示例有6个同时请求,所以这个限制是google chrome引入的,而不是rocket /我的实现。