https://github.com/docker-client/echo-server
https://github.com/docker-client/echo-server
hacktoberfest
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/docker-client/echo-server
- Owner: docker-client
- License: mit
- Created: 2022-02-28T22:29:57.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2026-04-17T22:08:04.000Z (about 2 months ago)
- Last Synced: 2026-04-18T00:27:44.095Z (about 2 months ago)
- Topics: hacktoberfest
- Language: Go
- Homepage:
- Size: 122 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# echo-server
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:`
with `` matching Git tags/releases on GitHub.
Supported platforms:
- `linux/amd64`
- `linux/arm64/v8`
- `windows-ltsc2022`
---
## ๐ Features
- **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
---
## ๐ HTTP/1.1 Upgrade Endpoint
```
POST /api/stream HTTP/1.1
Connection: Upgrade
Upgrade: testproto
```
The server upgrades the connection and speaks raw TCP after switching protocols.
---
## ๐งช Default Behavior
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 counter
- `set ` โ sets counter to ``
- any other input โ "unknown command"
You can connect using the built-in client or tools like `nc`:
```bash
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 8080
```
---
## ๐ Scripted Responses (JSON)
Send a JSON payload with a `POST` request to `/api/stream`, along with Upgrade headers.
### Example Request:
```http
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" }
]
}
```
### Supported Actions:
| 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)* |
---
## ๐ Example Client
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.
---
## ๐ณ Docker
To run via Docker:
```bash
docker run --rm -it -p 8080:8080 gesellix/echo-server:
```
---
## ๐ซ Feedback
Issues and contributions welcome via GitHub.