WebSocket extension for go-nimble.
- Easy integration of WebSocket streams with go-nimble routes
- Automatic reconnection and lifecycle event handling
- Message filtering and processing
go get github.com/wiktortr/go-nimble-websocket
Below is a minimal example that subscribes to Binance's WebSocket stream and processes trade events:
package main
import (
"encoding/json"
"github.com/wiktortr/go-nimble-websocket/websocket"
"github.com/wiktortr/go-nimble/nimble"
"go.uber.org/fx"
"go.uber.org/fx/fxevent"
"go.uber.org/zap"
)
func routeDef() *nimble.Route {
return nimble.
From("ws://data-stream.binance.vision/stream").
Log("received").
Process(func(msg *nimble.Message) error {
if msg.Headers[websocket.Event] == websocket.Connect {
request := map[string]any{
"id": msg.Id,
"method": "SUBSCRIBE",
"params": []string{"btcusdc@trade"},
}
payload, err := json.Marshal(request)
if err != nil {
return err
}
msg.Payload = payload
}
return nil
}).
Filter(func(msg *nimble.Message) (bool, error) {
return msg.Headers[websocket.Event] == websocket.Connect, nil
}).
To("ws://data-stream.binance.vision/stream")
}
func main() {
fx.New(
fx.Provide(zap.NewDevelopment),
fx.WithLogger(func(log *zap.Logger) fxevent.Logger {
return &fxevent.ZapLogger{Logger: log}
}),
websocket.Module,
nimble.AsRoute(routeDef),
nimble.Module,
).Run()
}This project is licensed under the MIT License. See the LICENSE file for details.