如何使用 warp 监听多个端口?
How to listen on multiple ports with warp?
warp::serve(routes)
.run(([127, 0, 0, 1], 3030))
.await;
如何监听 http 请求和 websocket 连接的不同端口?
通常,没有理由为 WebSockets 使用单独的端口。
但是,如果您真的想在多个端口上侦听(这还有其他用例,例如在一个 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?;
我承认我没有尝试自己编译这段代码,所以可能会有一些小的编译错误,但要点应该很清楚。
您可以同时启动两个单独的实例并 运行 它们:
tokio::join!(
warp::serve(routes).run(([127, 0, 0, 1], 3030)),
warp::serve(routes).run(([127, 0, 0, 1], 3031)),
);
灵感来自
warp::serve(routes)
.run(([127, 0, 0, 1], 3030))
.await;
如何监听 http 请求和 websocket 连接的不同端口?
通常,没有理由为 WebSockets 使用单独的端口。
但是,如果您真的想在多个端口上侦听(这还有其他用例,例如在一个 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?;
我承认我没有尝试自己编译这段代码,所以可能会有一些小的编译错误,但要点应该很清楚。
您可以同时启动两个单独的实例并 运行 它们:
tokio::join!(
warp::serve(routes).run(([127, 0, 0, 1], 3030)),
warp::serve(routes).run(([127, 0, 0, 1], 3031)),
);
灵感来自