Rust WebSocket 服务器示例:使用 tungstenite 库构建实时通信
以下是一个简单的示例 WebSocket 服务器的 Rust 代码:
use std::net::{TcpListener, TcpStream};
use std::thread;
use std::io::{Read, Write};
use std::sync::{Arc, Mutex};
use tungstenite::{accept, Message, WebSocket};
use tungstenite::handshake::HandshakeError;
fn main() {
let server = TcpListener::bind("127.0.0.1:8080").unwrap();
let shared_data = Arc::new(Mutex::new(Vec::new()));
for stream in server.incoming() {
match stream {
Ok(stream) => {
let shared_data = shared_data.clone();
thread::spawn(move || {
let mut websocket = match accept(stream) {
Ok(ws) => ws,
Err(HandshakeError::Interrupted(_)) => panic!("Interrupted"),
Err(HandshakeError::Failure(e)) => {
eprintln!("Error during handshake: {}", e);
return;
}
};
let (mut sender, mut receiver) = websocket.split();
loop {
let message = match receiver.read_message() {
Ok(msg) => msg,
Err(_) => return,
};
match message {
Message::Text(text) => {
let mut data = shared_data.lock().unwrap();
data.push(text);
println!("Received text message: {}", text);
for message in &*data {
if let Err(_) = sender.write_message(Message::Text(message.clone())) {
return;
}
}
}
_ => (),
}
}
});
}
Err(_) => (),
}
}
}
此代码使用 tungstenite 库,它提供了一个简单的 API 来处理 WebSocket 连接。在此示例中,我们绑定到本地主机的 TCP 端口 8080 上,并在每个传入的连接上创建一个新线程。每个连接都将通过 WebSocket 握手进行升级,然后我们将分离发送者和接收者。接收者将等待传入消息,并在接收到文本消息时将其存储在共享数据中。发送者将遍历共享数据并向每个连接发送消息。
原文地址: https://www.cveoy.top/t/topic/nhtp 著作权归作者所有。请勿转载和采集!