以下是一个简单的示例 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 握手进行升级,然后我们将分离发送者和接收者。接收者将等待传入消息,并在接收到文本消息时将其存储在共享数据中。发送者将遍历共享数据并向每个连接发送消息。

Rust WebSocket 服务器示例:使用 tungstenite 库构建实时通信

原文地址: https://www.cveoy.top/t/topic/nhtp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录