actix-web 中的 HttpServer::listen() 和 HttpServer::bind() 有什么区别?

问题描述 投票:0回答:2

我目前正在开发 actix-web 应用程序,但我很难理解

HttpServer.listen()
HttpServer.bind()
有何不同以及这些函数的作用。

rust httpserver actix-web
2个回答
1
投票

HttpServer::bind
获取(一堆)套接字地址,解析它们,打开相应的连接,然后监听。

HttpServer::listen
只是听。

rustdoc 在大多数函数旁边都有一个

source
链接,因此您实际上可以 浏览代码到
bind
,而且非常简单:

    pub fn bind<A: net::ToSocketAddrs>(mut self, addrs: A) -> io::Result<Self> {
        let sockets = self.bind2(addrs)?;

        for lst in sockets {
            self = self.listen(lst)?;
        }

        Ok(self)
    }

0
投票

有一个实际的区别,在《Rust 从零到生产》一书中进行了介绍,第 40 页。当你想要绑定到端口 0 时,它将调用从

bind
更改为
listen
,这是 Linux 的说法您想绑定到随机端口。使用
listen
,应用程序可以告诉您它实际接收到的端口。

© www.soinside.com 2019 - 2024. All rights reserved.