Sample code for 30+ languages & platforms
B4X

WebSocket Binance Trade Stream (subscribe and receive updates)

See more WebSocket Examples

Subscribe to a binance trade stream and receive updates.

Chilkat B4X Downloads

B4X
Dim success As Boolean = False

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

Dim ws As ChilkatWebSocket
ws.Initialize("ws")

'  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.

Dim rest As ChilkatRest
rest.Initialize("rest")

'  Connect to wss://stream.binance.com:9443
success = rest.Connect("stream.binance.com", 9443, True, False)
If success = False Then
    Log(rest.LastErrorText)
    Return
End If

success = ws.UseConnection(rest)
If success = False Then
    Log(ws.LastErrorText)
    Return
End If

ws.AddClientHeaders

'   Raw streams are accessed at /ws/<streamName>
Dim responseBody As String = rest.FullRequestNoBody("GET", "/ws/btcusdt")
If rest.LastMethodSuccess = False Then
    Log(rest.LastErrorText)
    Return
End If

success = ws.ValidateServerHandshake
If success <> True Then
    Log(ws.LastErrorText)
    Log(responseBody)
    Log(rest.ResponseHeader)
    Return
End If


Log(responseBody)
Log(rest.ResponseHeader)

'  POST JSON to subscribe to a stream

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

Dim json As ChilkatJsonObject
json.Initialize
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
Dim finalFrame As Boolean = True
success = ws.SendFrame(json.Emit, finalFrame)
If success <> True Then
    Log(ws.LastErrorText)
    Return
End If


Dim jsonTradeData As ChilkatJsonObject
jsonTradeData.Initialize
jsonTradeData.EmitCompact = False

'  Begin reading the trade stream response.
'  We'll just read the 1st 10 updates and then exit..
Dim receivedFinalFrame As Boolean = False
Dim numTradesReceived As Int = 0
Do While numTradesReceived < 5

    success = ws.ReadFrame
    If success <> True Then
        Log("Failed to receive a frame")
        Log("ReadFrame fail reason = " & ws.ReadFrameFailReason)
        Log(ws.LastErrorText)
        Return
    End If


    '  The responses we desire are in Text frames, where the opcode = 1.
    If ws.FrameOpcodeInt = 1 Then
        Dim receivedJson As String = ws.GetFrameData

        jsonTradeData.Load(receivedJson)
        Log(jsonTradeData.Emit)

        numTradesReceived = numTradesReceived + 1
    End If


Loop

'  Close the websocket connection.
success = ws.SendClose(True, 1000, "Closing this websocket.")
If success <> True Then
    Log(ws.LastErrorText)
    Return
End If


'  Read the Close response.
success = ws.ReadFrame
If success <> True Then
    Log("ReadFrame fail reason = " & ws.ReadFrameFailReason)
    Log(ws.LastErrorText)
    Return
End If


Log("Success.")

'  The output of the above code is shown here: