【问题标题】:How to listen on multiple ports with warp?如何用warp监听多个端口?
【发布时间】:2021-12-16 03:47:45
【问题描述】:
warp::serve(routes)
    .run(([127, 0, 0, 1], 3030))
    .await;

如何监听不同端口的 http 请求和 websocket 连接?

【问题讨论】:

    标签: rust warp


    【解决方案1】:

    您可以启动两个单独的实例并同时运行它们:

    tokio::join!(
        warp::serve(routes).run(([127, 0, 0, 1], 3030)),
        warp::serve(routes).run(([127, 0, 0, 1], 3031)),
    );
    

    灵感来自Run multiple actix app on different ports

    【讨论】:

      【解决方案2】:

      一般来说,没有理由为 WebSockets 使用单独的端口。

      但是,如果您真的想监听多个端口(这还有其他用例,例如支持一个 Server 实例的纯文本和 TLS),您可以使用 Server::run_incoming。为此,您需要创建自己的侦听器并使用流组合器组合它们的 TcpListenerStreams。

      use std::net::Ipv4Addr;
      use tokio::net::TcpListener;
      use tokio_stream::{StreamExt, wrappers::TcpListenerStream};
      
      let listener1 = TcpListener::bind((Ipv4Addr::LOCALHOST, 3030)).await?;
      let listener2 = TcpListener::bind((Ipv4Addr::LOCALHOST, 3031)).await?;
      
      let stream1 = TcpListenerStream::new(listener1);
      let stream2 = TcpListenerStream::new(listener2);
      
      let combined = stream1.merge(stream2);
      
      warp::serve(routes).run_incoming(combined).await?;
      

      我承认没有尝试自己编译这段代码,所以可能会有一些小的编译器错误,但要点应该足够清楚。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-28
        • 1970-01-01
        • 2012-12-29
        • 1970-01-01
        • 2012-03-27
        相关资源
        最近更新 更多