[tunnelbroker] Hyper service for WebSocket connections
Summary:
Implementation basing on tokio-tungstenite doesn't work well with upgrading HTTP connection to WebSocket. This diff implements hyper service for WebSocket connections, using hyper-tungstenite library.
By doing that, we also get health check for free. In the future, we can support more "normal" HTTP requests on the same port as websocket.
A great series of articles describing Tower / Hyper services under the hood: https://www.fpcomplete.com/blog/axum-hyper-tonic-tower-part2/
The hyper-tungstenite library does more or less stuff that is described in this article: https://levelup.gitconnected.com/handling-websocket-and-http-on-the-same-port-with-rust-f65b770722c9
Depends on D9156.
Test Plan: Tunnelbroker builds. Actual test plan is in the next diff.
Reviewers: kamil, michal, varun, jon
Reviewed By: michal
Subscribers: ashoat, tomek
Differential Revision: https://phab.comm.dev/D9158