Unfortunately, I am no longer able to provide support for this project. Please see https://github.com/carterjones/signalr/network for some forks that have been created.
This is my personal attempt at implementating the client side of the WebSocket portion of the SignalR protocol. I use it for various virtual currency trading platforms that use SignalR.
It supports CloudFlare-protected sites by default.
Simple example:
package main
import (
"log"
"github.com/carterjones/signalr"
)
func main() {
// Prepare a SignalR client.
c := signalr.New(
"fake-server.definitely-not-real",
"1.5",
"/signalr",
`[{"name":"awesomehub"}]`,
nil,
)
// Define message and error handlers.
msgHandler := func(msg signalr.Message) { log.Println(msg) }
panicIfErr := func(err error) {
if err != nil {
log.Panic(err)
}
}
// Start the connection.
err := c.Run(msgHandler, panicIfErr)
panicIfErr(err)
// Wait indefinitely.
select {}
}
Generic usage:
Cryptocurrency examples:
Proxy examples:
- GoDoc: https://godoc.org/github.com/carterjones/signalr
- SignalR specification: https://docs.microsoft.com/en-us/aspnet/signalr/overview/
- Excellent technical deep dive of the protocol: https://blog.3d-logic.com/2015/03/29/signalr-on-the-wire-an-informal-description-of-the-signalr-protocol/
If anything is unclear or could be improved, please open an issue or submit a pull request. Thanks!