Sample code for 30+ languages & platforms
Swift

WebSocket Binance Trade Stream (subscribe and receive updates)

See more WebSocket Examples

Subscribe to a binance trade stream and receive updates.

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

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

    let ws = CkoWebSocket()!

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

    let rest = CkoRest()!

    // Connect to wss://stream.binance.com:9443
    success = rest.connect(hostname: "stream.binance.com", port: 9443, tls: true, autoReconnect: false)
    if success == false {
        print("\(rest.lastErrorText!)")
        return
    }

    success = ws.useConnection(connection: rest)
    if success == false {
        print("\(ws.lastErrorText!)")
        return
    }

    ws.addClientHeaders()

    //  Raw streams are accessed at /ws/<streamName>
    var responseBody: String? = rest.fullRequestNoBody(httpVerb: "GET", uriPath: "/ws/btcusdt")
    if rest.lastMethodSuccess == false {
        print("\(rest.lastErrorText!)")
        return
    }

    success = ws.validateServerHandshake()
    if success != true {
        print("\(ws.lastErrorText!)")
        print("\(responseBody!)")
        print("\(rest.responseHeader!)")
        return
    }

    print("\(responseBody!)")
    print("\(rest.responseHeader!)")

    // POST JSON to subscribe to a stream

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

    let json = CkoJsonObject()!
    json.updateString(jsonPath: "method", value: "SUBSCRIBE")
    json.updateString(jsonPath: "params[0]", value: "btcusdt@aggTrade")
    json.updateString(jsonPath: "params[1]", value: "btcusdt@depth")
    json.updateInt(jsonPath: "id", value: 1)

    // Send a full message in a single frame
    var finalFrame: Bool = true
    success = ws.sendFrame(stringToSend: json.emit(), finalFrame: finalFrame)
    if success != true {
        print("\(ws.lastErrorText!)")
        return
    }

    let jsonTradeData = CkoJsonObject()!
    jsonTradeData.emitCompact = false

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

        success = ws.readFrame()
        if success != true {
            print("Failed to receive a frame")
            print("ReadFrame fail reason = \(ws.readFrameFailReason.intValue)")
            print("\(ws.lastErrorText!)")
            return
        }

        // The responses we desire are in Text frames, where the opcode = 1.
        if ws.frameOpcodeInt.intValue == 1 {
            var receivedJson: String? = ws.getFrameData()

            jsonTradeData.load(json: receivedJson)
            print("\(jsonTradeData.emit()!)")

            numTradesReceived = numTradesReceived + 1
        }

    }

    // Close the websocket connection.
    success = ws.sendClose(includeStatus: true, statusCode: 1000, reason: "Closing this websocket.")
    if success != true {
        print("\(ws.lastErrorText!)")
        return
    }

    // Read the Close response.
    success = ws.readFrame()
    if success != true {
        print("ReadFrame fail reason = \(ws.readFrameFailReason.intValue)")
        print("\(ws.lastErrorText!)")
        return
    }

    print("Success.")

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

}