1

我正在学习 Actix 框架。该文档有示例

use actix_rt::System;
use actix_web::{web, App, HttpResponse, HttpServer};
use std::sync::mpsc;
use std::thread;

#[actix_rt::main]
async fn main() {
    let (tx, rx) = mpsc::channel();

    thread::spawn(move || {
        let sys = System::new("http-server");

        let srv = HttpServer::new(|| App::new().route("/", web::get().to(|| HttpResponse::Ok())))
            .bind("127.0.0.1:8088")?
            .shutdown_timeout(60) // <- Set shutdown timeout to 60 seconds
            .run();

        let _ = tx.send(srv);
        sys.run()
    });

    let srv = rx.recv().unwrap();

    // pause accepting new connections
    srv.pause().await;
    // resume accepting new connections
    srv.resume().await;
    // stop server
    srv.stop(true).await;
}

编译此代码后我没有错误:

在此处输入图像描述

但我无法在浏览器中打开该页面:

在此处输入图像描述

我错过了什么,为什么页面没有在我的浏览器中打开?

4

1 回答 1

1

本节是一个示例,说明如何控制在先前创建的线程中运行的服务器。您可以优雅地暂停、恢复和停止服务器。这些行执行这三个操作。最后,服务器停止。

    let srv = rx.recv().unwrap();

    // pause accepting new connections
    srv.pause().await;
    // resume accepting new connections
    srv.resume().await;
    // stop server
    srv.stop(true).await;

这使得这个示例成为一个在代码段末尾自行关闭的服务器。让此代码段无限期运行的一个小改动是进行此更改:

    let srv = rx.recv().unwrap();

    // wait for any incoming connections
    srv.await;

这不是我推荐的。还有其他示例,特别是在 actix/examples 存储库中,可能更适合让您开始了解如何构建 actix 服务器。

于 2020-01-07T05:27:16.223 回答