这里发生了一些问题: 您发布的错误是因为闭包没有返回任何内容,并且返回的()不是Handler的有效响应。然而,您只需要删除ws(...)后面的;。 闭包不能引用局部变量send,因为处理程序必须是'static。您可以通过使用move关键字来解决这个问题,这样任何捕获的变量都会移动到闭包中:web::get().to(move |req: HttpRequest, body: // ^^^^ HttpServer::new()的闭包可以多次调用,因为它受Fn的约束。在这种情况下,我们已经将send移入,但还需要移出。您可以在闭包中.clone()-ing实现这一点(幸运的是,横梁Sender的克隆成本很低):HttpServer::new(move || { let send = send.clone(); // need to make a new copy to move into the route handler App::new(... 同样,在路由闭包中,不能通过将变量传递给ws(...)来移动变量,因为它需要多次调用。在其他情况下,您可以只通过引用传递,Sender不需要所有权就可以做任何事情,但因为async函数返回Future来捕获参数,而函数不允许返回引用其捕获的值,所以您无论如何都需要.clone():ws(req, body, send.clone())