我正在尝试连接到服务器上的 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”失败:
这可能与什么有关?
您的
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
}
}