如何使用warp监听多个端口?

Aid*_*son 4 rust warp

warp::serve(routes)
    .run(([127, 0, 0, 1], 3030))
    .await;
Run Code Online (Sandbox Code Playgroud)

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

kmd*_*eko 7

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

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

灵感来自在不同端口上运行多个 actix 应用程序


Fal*_*ior 6

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

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

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?;
Run Code Online (Sandbox Code Playgroud)

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