#echo-server #echo #server #ws #http

bin+lib hyper_echo

Echo server supporting http and websocket

1 unstable release

new 0.1.0 Mar 9, 2025

#435 in WebSocket

MIT license

39KB
916 lines

Hyper_echo is an echo server empowered by tokio, tower, hyper and fastwebsockets. It supports both HTTP and WebSocket protocols, making it ideal for testing and debugging network applications.

💡Features

HTTP

  • Echoes back any received request (except websocket upgrade)
  • Supports both HTTP/1.1 and HTTP/2
  • Customizable logging levels:
    • 0: No logging (default)
    • 1: Log the request URI
    • 2: Log the request URI and headers
    • 3: Log the request URI, headers and body

WebSocket

  • Echoes received message back to the client
  • Logging of received messages (off by default)
  • Sends periodic pings (every 5 seconds by default) to keep connections alive and disconnects inactive clients

Other

  • Colorful log output when the output is a terminal
  • Choose your desired port or let hyper_echo automatically find a free one
  • Supports multi-threading, but efficient enough to use only one thread by default
  • Graceful shutdown on Ctrl-C and force exit on the second Ctrl-C

Use the flag --help to discover CLI options for customizing the behavior of hyper_echo.

⚙️ HTTP logging implementation

There are two crate's features controlling HTTP logging:

  • tower_trace (default) is based on Trace from tower_http crate
  • custom_trace is a layer for tower service written from scratch

Both implementations are almost identical from a user perspective. There is no real reason to use logging implementation provided by custom_trace feature. It was created to learn how to create a custom tower layer and how to handle multiple features in one crate. But if in some case you want to use it, please don't forget to add default-features = false if you are using custom_trace because it is possible to use only one logging implementation at a time.

🙏 Acknowledgements

Thanks to David Peterson for the Tower deep dive video explained for me how to use tower.

Dependencies

~14–25MB
~355K SLoC