为什么Web套接字连接服务器时出错?

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

我正在尝试连接到服务器上的 Web 套接字,该套接字给出一个错误,指出连接失败

防锈代码:

use axum::{extract::{ws::WebSocket, WebSocketUpgrade}, response::IntoResponse, routing::get, Router};
use tokio::net::TcpListener;
use tower_http::services::ServeDir;


#[tokio::main]
async fn main(){
  let listener = TcpListener::bind("localhost:3000").await.unwrap();
  axum::serve(listener, router()).await.unwrap();  
}

fn router() -> Router{
    Router::new()
        .route("/message_list", get(hello_world))
        .nest_service("/", ServeDir::new("static"))
}

async fn hello_world(ws: WebSocketUpgrade) -> impl IntoResponse{
    let _res =ws.on_upgrade(|ws| socet_handler(ws));
}

async fn socet_handler(mut ws: WebSocket){
    println!("IT READY!");
    let _res = 
    ws.send(axum::extract::ws::Message::Text('hi'.to_string()));
}

js代码:

let socket = new WebSocket("ws://localhost:3000/message_list")

我尝试将路径上的“ws”更改为“wss”,但没有帮助。 网站上不断出现错误:WebSocket 连接到“ws://localhost:3000/message_list”失败:

这可能与什么有关?

javascript rust rust-tokio rust-axum
1个回答
0
投票

您的

socet_handler
不会保持 Websocket 连接处于活动状态,它会发送一条消息,然后立即结束该功能 - 删除 Websocket。

尝试添加一个循环来侦听消息,如文档中所示:

async fn handle_socket(mut socket: WebSocket) {
    println!("IT READY!");
    let _res = ws.send(axum::extract::ws::Message::Text('hi'.to_string()));

    while let Some(msg) = socket.recv().await {
        // handle the message
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.