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!