You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用多个WebSocket客户端测试Warp Filter?

解决Warp测试中多客户端连接同一测试服务器的问题

你当前的代码里,每次调用handshake(get_server())都会创建一个全新的测试服务器实例,导致client1和client2实际连接的是两个不同的服务器。要让所有客户端共享同一个测试服务器,可以通过先启动一个持久化的测试服务器,再让客户端连接到这个服务器的地址来实现:

修正后的测试代码

#[tokio::test]
async fn test_ws() {
    // 只初始化一次Filter,避免重复创建
    let server_filter = get_server();

    // 启动测试服务器,绑定到随机可用端口
    let (addr, server) = warp::serve(server_filter)
        .bind_with_graceful_shutdown(([127, 0, 0, 1], 0), async {
            tokio::signal::ctrl_c().await.ok();
        });

    // 后台运行服务器,避免阻塞测试逻辑
    tokio::spawn(server);

    // 让客户端连接到同一个服务器地址
    let mut client1 = warp::test::ws()
        .connect(&format!("ws://{}", addr))
        .await
        .expect("client1 handshake failed");
    
    let mut client2 = warp::test::ws()
        .connect(&format!("ws://{}", addr))
        .await
        .expect("client2 handshake failed");

    // 这里可以继续编写你的测试逻辑,比如发送/接收消息验证多客户端交互
}

关键说明

  • bind_with_graceful_shutdown会返回服务器的绑定地址和服务器实例,用tokio::spawn把服务器放到后台异步运行,不影响后续客户端连接逻辑。
  • 所有客户端都通过connect方法连接到同一个addr,确保它们访问的是同一个服务器实例。
  • 只调用一次get_server()获取Filter,避免重复初始化带来的状态不一致问题。

内容的提问来源于stack exchange,提问作者Ceres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:06:23