Sample code for 30+ languages & platforms
Go

WebSocket Binance Trade Stream (subscribe and receive updates)

See more WebSocket Examples

Subscribe to a binance trade stream and receive updates.

Chilkat Go Downloads

Go
    success := false

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    ws := chilkat.NewWebSocket()

    // For brevity, this example does not check for errors when etablishing the WebSocket connection.
    // See Establish WebSocket Connection for more complete sample code for making the connection.

    rest := chilkat.NewRest()

    // Connect to wss://stream.binance.com:9443
    success = rest.Connect("stream.binance.com",9443,true,false)
    if success == false {
        fmt.Println(rest.LastErrorText())
        ws.DisposeWebSocket()
        rest.DisposeRest()
        return
    }

    success = ws.UseConnection(rest)
    if success == false {
        fmt.Println(ws.LastErrorText())
        ws.DisposeWebSocket()
        rest.DisposeRest()
        return
    }

    ws.AddClientHeaders()

    //  Raw streams are accessed at /ws/<streamName>
    responseBody := rest.FullRequestNoBody("GET","/ws/btcusdt")
    if rest.LastMethodSuccess() == false {
        fmt.Println(rest.LastErrorText())
        ws.DisposeWebSocket()
        rest.DisposeRest()
        return
    }

    success = ws.ValidateServerHandshake()
    if success != true {
        fmt.Println(ws.LastErrorText())
        fmt.Println(*responseBody)
        fmt.Println(rest.ResponseHeader())
        ws.DisposeWebSocket()
        rest.DisposeRest()
        return
    }

    fmt.Println(*responseBody)
    fmt.Println(rest.ResponseHeader())

    // POST JSON to subscribe to a stream

    // {
    // "method": "SUBSCRIBE",
    // "params":
    // [
    // "btcusdt@aggTrade",
    // "btcusdt@depth"
    // ],
    // "id": 1
    // }

    json := chilkat.NewJsonObject()
    json.UpdateString("method","SUBSCRIBE")
    json.UpdateString("params[0]","btcusdt@aggTrade")
    json.UpdateString("params[1]","btcusdt@depth")
    json.UpdateInt("id",1)

    // Send a full message in a single frame
    finalFrame := true
    success = ws.SendFrame(*json.Emit(),finalFrame)
    if success != true {
        fmt.Println(ws.LastErrorText())
        ws.DisposeWebSocket()
        rest.DisposeRest()
        json.DisposeJsonObject()
        return
    }

    jsonTradeData := chilkat.NewJsonObject()
    jsonTradeData.SetEmitCompact(false)

    // Begin reading the trade stream response.
    // We'll just read the 1st 10 updates and then exit..
    receivedFinalFrame := false
    numTradesReceived := 0
    for numTradesReceived < 5 {

        success = ws.ReadFrame()
        if success != true {
            fmt.Println("Failed to receive a frame")
            fmt.Println("ReadFrame fail reason = ", ws.ReadFrameFailReason())
            fmt.Println(ws.LastErrorText())
            ws.DisposeWebSocket()
            rest.DisposeRest()
            json.DisposeJsonObject()
            jsonTradeData.DisposeJsonObject()
            return
        }

        // The responses we desire are in Text frames, where the opcode = 1.
        if ws.FrameOpcodeInt() == 1 {
            receivedJson := ws.GetFrameData()

            jsonTradeData.Load(*receivedJson)
            fmt.Println(*jsonTradeData.Emit())

            numTradesReceived = numTradesReceived + 1
        }

    }

    // Close the websocket connection.
    success = ws.SendClose(true,1000,"Closing this websocket.")
    if success != true {
        fmt.Println(ws.LastErrorText())
        ws.DisposeWebSocket()
        rest.DisposeRest()
        json.DisposeJsonObject()
        jsonTradeData.DisposeJsonObject()
        return
    }

    // Read the Close response.
    success = ws.ReadFrame()
    if success != true {
        fmt.Println("ReadFrame fail reason = ", ws.ReadFrameFailReason())
        fmt.Println(ws.LastErrorText())
        ws.DisposeWebSocket()
        rest.DisposeRest()
        json.DisposeJsonObject()
        jsonTradeData.DisposeJsonObject()
        return
    }

    fmt.Println("Success.")

    // The output of the above code is shown here:

    ws.DisposeWebSocket()
    rest.DisposeRest()
    json.DisposeJsonObject()
    jsonTradeData.DisposeJsonObject()