我正在尝试制作一个异步WebSocket服务器(我自己的实现)。我有以下代码:
use tokio::net::TcpListener;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut listener = TcpListener::bind("127.0.0.1:8080").await?;
loop {
let (socket, _) = listener.accept().await?;
tokio::spawn(async move {
let mut buffer = [0u8; 512];
let stuff = match socket.read(&mut buffer).await {
Ok(n) => buffer[..n].to_vec(),
Err(_) => return,
};
});
}
}
现在我该怎么办?根据规范,我必须检查FIN位,操作码等,但是我该怎么做。 FIN位仅为1位,我们应该如何将其从u8阵列中取出?例子会很有帮助。
要从字节缓冲区中读取第一位,可以使用类似以下的内容:
fn fin_bit(buffer: &[u8]) -> Option<bool> {
buffer.get(0)
.map(|first_byte| first_byte & 0b10000000 > 0)
}