mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-02-15 14:57:44 +01:00
157 lines
3.5 KiB
Markdown
157 lines
3.5 KiB
Markdown
# WireMock.Net WebSocket Examples
|
|
|
|
This project demonstrates all the WebSocket capabilities of WireMock.Net.
|
|
|
|
## Prerequisites
|
|
|
|
- .NET 8.0 SDK
|
|
- Optional: `wscat` for manual testing (`npm install -g wscat`)
|
|
|
|
## Running the Examples
|
|
|
|
```bash
|
|
cd examples/WireMock.Net.WebSocketExamples
|
|
dotnet run
|
|
```
|
|
|
|
## Available Examples
|
|
|
|
### 1. Echo Server
|
|
Simple WebSocket echo server that returns all messages back to the client.
|
|
|
|
**Test with:**
|
|
```bash
|
|
wscat -c ws://localhost:9091/ws/echo
|
|
```
|
|
|
|
### 2. Custom Message Handler
|
|
Chat server with commands: `/help`, `/time`, `/echo`, `/upper`, `/reverse`, `/quit`
|
|
|
|
**Test with:**
|
|
```bash
|
|
wscat -c ws://localhost:9091/ws/chat
|
|
> /help
|
|
> /time
|
|
> /echo Hello World
|
|
> /upper test
|
|
> /reverse hello
|
|
```
|
|
|
|
### 3. Broadcast Server
|
|
Messages sent by any client are broadcast to all connected clients.
|
|
|
|
**Test with multiple terminals:**
|
|
```bash
|
|
# Terminal 1
|
|
wscat -c ws://localhost:9091/ws/broadcast
|
|
|
|
# Terminal 2
|
|
wscat -c ws://localhost:9091/ws/broadcast
|
|
|
|
# Terminal 3
|
|
wscat -c ws://localhost:9091/ws/broadcast
|
|
```
|
|
|
|
Type messages in any terminal and see them appear in all terminals.
|
|
|
|
### 4. Scenario/State Machine
|
|
Game server with state transitions: Lobby -> Playing -> GameOver
|
|
|
|
**Test with:**
|
|
```bash
|
|
wscat -c ws://localhost:9091/ws/game
|
|
> ready
|
|
> attack
|
|
> defend
|
|
> quit
|
|
```
|
|
|
|
### 5. WebSocket Proxy
|
|
Proxies WebSocket connections to echo.websocket.org
|
|
|
|
**Test with:**
|
|
```bash
|
|
wscat -c ws://localhost:9091/ws/proxy
|
|
```
|
|
|
|
### 6. Multiple Endpoints
|
|
Runs multiple WebSocket endpoints simultaneously:
|
|
- `/ws/echo` - Echo server
|
|
- `/ws/time` - Returns server time
|
|
- `/ws/json` - Returns JSON responses
|
|
- `/ws/protocol` - Protocol-specific endpoint
|
|
|
|
### 7. All Examples
|
|
Runs all endpoints at once with connection statistics.
|
|
|
|
## Features Demonstrated
|
|
|
|
- ✅ **Echo Server** - Simple message echo
|
|
- ✅ **Custom Handlers** - Complex message processing
|
|
- ✅ **Broadcast** - Multi-client communication
|
|
- ✅ **Scenarios** - State machine patterns
|
|
- ✅ **Proxy** - Forwarding to real WebSocket servers
|
|
- ✅ **Protocol Negotiation** - Sec-WebSocket-Protocol support
|
|
- ✅ **JSON Messaging** - Structured data exchange
|
|
- ✅ **Connection Management** - Track and manage connections
|
|
- ✅ **Configuration** - Custom WebSocket settings
|
|
|
|
## Testing with wscat
|
|
|
|
Install wscat globally:
|
|
```bash
|
|
npm install -g wscat
|
|
```
|
|
|
|
Basic usage:
|
|
```bash
|
|
# Connect to endpoint
|
|
wscat -c ws://localhost:9091/ws/echo
|
|
|
|
# Connect with protocol
|
|
wscat -c ws://localhost:9091/ws/protocol -s chat
|
|
|
|
# Connect with headers
|
|
wscat -c ws://localhost:9091/ws/echo -H "X-Custom-Header: value"
|
|
```
|
|
|
|
## Testing with C# Client
|
|
|
|
The examples include built-in C# WebSocket clients for automated testing.
|
|
Select options 1 or 2 and press any key to run the automated tests.
|
|
|
|
## Configuration
|
|
|
|
WebSocket settings can be configured:
|
|
|
|
```csharp
|
|
var server = WireMockServer.Start(new WireMockServerSettings
|
|
{
|
|
Port = 9091,
|
|
WebSocketSettings = new WebSocketSettings
|
|
{
|
|
MaxConnections = 100,
|
|
ReceiveBufferSize = 8192,
|
|
MaxMessageSize = 1048576,
|
|
KeepAliveInterval = TimeSpan.FromSeconds(30),
|
|
CloseTimeout = TimeSpan.FromMinutes(10),
|
|
EnableCompression = true
|
|
}
|
|
});
|
|
```
|
|
|
|
## Monitoring
|
|
|
|
When running "All Examples" (option 7), press any key to view:
|
|
- Active connection count
|
|
- Connection IDs
|
|
- Request paths
|
|
- WebSocket states
|
|
|
|
## Notes
|
|
|
|
- All examples run on port 9091 by default
|
|
- Press CTRL+C to stop the server
|
|
- Multiple clients can connect simultaneously
|
|
- Connection states are tracked and can be queried
|