小编Rae*_*isi的帖子

检测TcpStream的传入协议

我的服务使用套接字通信收集并显示一些统计信息。一些客户端使用 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 检查来检测客户端的类型,这对于生产来说是不可接受的。

我的问题是:

  1. 有没有更好的实现方式?
  2. 是否有任何标准方法来检测每个传入流的类型?(就像是stream.protocol.start_with("ws")

环境

Rust version: `1.74 - stable`
Extra crate: `tungstenite = { version = "0.20" }`
Run Code Online (Sandbox Code Playgroud)

sockets websocket rust tungstenite

1
推荐指数
1
解决办法
63
查看次数

标签 统计

rust ×1

sockets ×1

tungstenite ×1

websocket ×1