Generated a readme.
This commit is contained in:
116
README.md
Normal file
116
README.md
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
# go-honeybee - WebSocket Connection Management for Go
|
||||||
|
|
||||||
|
Source: https://git.wisehodl.dev/jay/go-honeybee
|
||||||
|
|
||||||
|
Mirror: https://github.com/wisehodl/go-honeybee
|
||||||
|
|
||||||
|
## What this library does
|
||||||
|
|
||||||
|
`go-honeybee` provides reliable WebSocket connection primitives with automatic reconnection. It manages connection lifecycle, exponential backoff retry, and thread-safe message handling.
|
||||||
|
|
||||||
|
## What this library does not do
|
||||||
|
|
||||||
|
`go-honeybee` does not implement protocol-specific message parsing, subscription management, or connection pooling (yet). It provides the foundation for building protocol implementations (like Nostr clients) on top of stable WebSocket connections.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Add `go-honeybee` to your project:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go get git.wisehodl.dev/jay/go-honeybee
|
||||||
|
```
|
||||||
|
|
||||||
|
If the primary repository is unavailable, use the `replace` directive in your go.mod:
|
||||||
|
|
||||||
|
```
|
||||||
|
replace git.wisehodl.dev/jay/go-honeybee => github.com/wisehodl/go-honeybee latest
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Basic Connection
|
||||||
|
|
||||||
|
```go
|
||||||
|
import "git.wisehodl.dev/jay/go-honeybee"
|
||||||
|
|
||||||
|
// Create connection
|
||||||
|
conn, err := honeybee.NewConnection("wss://relay.example.com", nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
|
// Connect with default retry disabled
|
||||||
|
if err := conn.Connect(); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle messages
|
||||||
|
go func() {
|
||||||
|
for msg := range conn.Incoming() {
|
||||||
|
// Process incoming message
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
// Handle errors
|
||||||
|
go func() {
|
||||||
|
for err := range conn.Errors() {
|
||||||
|
log.Printf("Connection error: %v", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
// Send message
|
||||||
|
conn.Send([]byte(`{"type":"subscribe"}`))
|
||||||
|
```
|
||||||
|
|
||||||
|
### Retry When Connecting
|
||||||
|
|
||||||
|
```go
|
||||||
|
config := &honeybee.Config{
|
||||||
|
Retry: &honeybee.RetryConfig{
|
||||||
|
MaxRetries: 0, // 0 = infinite
|
||||||
|
InitialDelay: 1 * time.Second,
|
||||||
|
MaxDelay: 30 * time.Second,
|
||||||
|
JitterFactor: 0.5,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
conn, err := honeybee.NewConnection("wss://relay.example.com", config)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configuration Options
|
||||||
|
|
||||||
|
```go
|
||||||
|
config, err := honeybee.NewConfig(
|
||||||
|
honeybee.WithRetry(),
|
||||||
|
honeybee.WithReadTimeout(30 * time.Second),
|
||||||
|
honeybee.WithWriteTimeout(10 * time.Second),
|
||||||
|
)
|
||||||
|
|
||||||
|
conn, err := honeybee.NewConnection("wss://relay.example.com", config)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Connection States
|
||||||
|
|
||||||
|
Connections transition through these states:
|
||||||
|
|
||||||
|
- `StateDisconnected` - Initial state, no socket
|
||||||
|
- `StateConnecting` - Connection attempt in progress
|
||||||
|
- `StateConnected` - Active connection, messages flowing
|
||||||
|
- `StateClosed` - Connection terminated
|
||||||
|
|
||||||
|
Check current state with `conn.State()`.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
Run tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go test ./...
|
||||||
|
```
|
||||||
|
|
||||||
|
Run with race detector:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go test -race ./...
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user