A cross-platform test server with support for HTTP/1.1 connection upgrades and deterministic scripted responses.
Multi-platform Docker images are available at
gesellix/echo-server:<version>
with <version> matching Git tags/releases on GitHub.
Supported platforms:
linux/amd64linux/arm64/v8windows-ltsc2022
- HTTP/1.1 Upgrade Handling to raw TCP
- Scripted deterministic responses via JSON body
- Interactive commands in default mode (e.g.
reset,set 10) - Cross-platform & container-friendly
- Useful for client protocol testing and upgrade simulations
POST /api/stream HTTP/1.1
Connection: Upgrade
Upgrade: testproto
The server upgrades the connection and speaks raw TCP after switching protocols.
When no script is provided, the server enters a simple interactive loop:
-
Sends a counter every second:
[0] scripted: counter: 0 [1] scripted: counter: 1 ... -
Accepts basic commands from the client:
reset→ resets counterset <n>→ sets counter to<n>- any other input → "unknown command"
You can connect using the built-in client or tools like nc:
go run ./src/hijack_client.go
# or
{ echo -en "GET /api/stream HTTP/1.1\r\nHost: localhost\r\nConnection: Upgrade\r\nUpgrade: testproto\r\n\r\n"; cat; } | nc localhost 8080Send a JSON payload with a POST request to /api/stream, along with Upgrade headers.
POST /api/stream HTTP/1.1
Host: localhost:8080
Connection: Upgrade
Upgrade: testproto
Content-Type: application/json
{
"actions": [
{ "type": "response", "text": "first" },
{ "type": "delay", "ms": 1000 },
{ "type": "response", "text": "second" },
{ "type": "close" }
]
}| Type | Description | Example |
|---|---|---|
response |
Sends a line of text | "text": "Hello" |
delay |
Waits before next action (milliseconds) | "ms": 500 |
close |
Closes the TCP connection | (no parameters) |
A simple Go client for interactive testing is available at:
./src/hijack_client.go
It connects to the server, performs the upgrade handshake, and allows typing commands live.
To run via Docker:
docker run --rm -it -p 8080:8080 gesellix/echo-server:<version>Issues and contributions welcome via GitHub.