我的服务使用套接字通信收集并显示一些统计信息。一些客户端使用 WebSocket 协议通过 Web 浏览器连接到它,而其他客户端则使用使用常规套接字的 Windows 服务。
我这样创建了一个监听端口:
let on = "0.0.0.0:8081";
let server = std::net::TcpListener::bind(on)?;
while let Ok((stream, _)) = server.accept() {
let peer_adr = stream.peer_addr().unwrap();
if peer_adr.to_string().starts_with("127.0.0") {
// socket
} else {
// web socket
let ws = tungstenite::accept(stream)?;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过 IP 检查来检测客户端的类型,这对于生产来说是不可接受的。
我的问题是:
stream.protocol.start_with("ws"))环境
Rust version: `1.74 - stable`
Extra crate: `tungstenite = { version = "0.20" }`
Run Code Online (Sandbox Code Playgroud)