Skip to content

wiktortr/go-nimble-websocket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-nimble-websocket

WebSocket extension for go-nimble.

Features

  • Easy integration of WebSocket streams with go-nimble routes
  • Automatic reconnection and lifecycle event handling
  • Message filtering and processing

Installation

go get github.com/wiktortr/go-nimble-websocket

Usage Example

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()
}

License

This project is licensed under the MIT License. See the LICENSE file for details.

About

WebSocket extension for go-nimble

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages