Как сбросить содержимое AppState в actix-web?

Где я могу очистить AppState в Actix Web? Конкретно мне нужно позвонить drop(tx) на канале, когда система выключается, но я не уверен, где реализовать деструктор или какое сообщение актера прослушивать.

Я понимаю, что было бы лучше использовать актеров повсюду, но это то, с чем я должен работать прямо сейчас.

let (tx, rx) = channel();

HttpServer::new(move || {
    let state = AppState {
        channel: Arc::new(Mutex::new(tx.clone())),
    };

    App::with_state(state)
        .middleware(middleware::Logger::default())
        .resource("/ws/", |r| r.route().f(ws_route))
        .resource("/", |r| r.f(index_html))
        .handler("/", actix_web::fs::StaticFiles::new("./resources/public/").unwrap())
}).bind("0.0.0.0:9000")
    .unwrap()
    .start();

sys.run(); // Ctrl+C signal is caught here

for elt in rx {} // wait for tx to drop (it never does)

0 ответов

Другие вопросы по тегам