Sample code for 30+ languages & platforms
Rust

Binary.com Tick Stream

See more WebSocket Examples

Tick Stream Request -- Initiate a continuous stream of spot price updates for a given symbol.

Chilkat Rust Downloads

Rust

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

let ws = chilkat::WebSocket::new();

// 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 = chilkat::Rest::new();

// Connect to ws.binaryws.com
let _ = rest.connect("ws.binaryws.com", 443, true, false).is_ok();
let _ = ws.use_connection(&rest);
let _ = ws.add_client_headers();

// My app_id is 12332.  You'll wnat to use your own...
let response_body = rest.full_request_no_body("GET", "/websockets/v3?app_id=12332").unwrap_or_default();
if ws.validate_server_handshake().is_err() {
    println!("{}", ws.last_error_text());
    println!("{}", response_body);
    println!("{}", rest.response_header());
    return;
}

// Build and send the following message:

// {
//   "ticks": "R_50",
//   "subscribe": 1
// }

let json = chilkat::JsonObject::new();
let _ = json.append_string("ticks", "R_50");
let _ = json.append_int("subscribe", 1);

// Send a full message in a single frame
let final_frame = true;
if ws.send_frame(&json.emit().unwrap_or_default(), final_frame).is_err() {
    println!("{}", ws.last_error_text());
    return;
}

let json_tick_data = chilkat::JsonObject::new();
json_tick_data.set_emit_compact(false);

// Begin reading the tick stream response.
// We'll just read the 1st 10 updates and then exit..
let mut num_ticks_received = 0;
while num_ticks_received < 5 {

    if ws.read_frame().is_err() {
        println!("Failed to receive a frame");
        println!("ReadFrame fail reason = {}", ws.read_frame_fail_reason());
        println!("{}", ws.last_error_text());
        return;
    }

    // The responses we desire are in Text frames, where the opcode = 1.
    if ws.frame_opcode_int() == 1 {
        let received_json = ws.get_frame_data().unwrap_or_default();

        let _ = json_tick_data.load(&received_json);
        println!("{}", json_tick_data.emit().unwrap_or_default());

        num_ticks_received = num_ticks_received + 1;
    }

}

// Close the websocket connection.
if ws.send_close(true, 1000, "Closing this websocket.").is_err() {
    println!("{}", ws.last_error_text());
    return;
}

// Read the Close response.
if ws.read_frame().is_err() {
    println!("ReadFrame fail reason = {}", ws.read_frame_fail_reason());
    println!("{}", ws.last_error_text());
    return;
}

println!("Success.");

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

// {
//   "echo_req": {
//     "subscribe": 1,
//     "ticks": "R_50"
//   },
//   "msg_type": "tick",
//   "tick": {
//     "ask": "373.8725",
//     "bid": "373.8325",
//     "epoch": "1517437456",
//     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
//     "quote": "373.8525",
//     "symbol": "R_50"
//   }
// }
// 
// {
//   "echo_req": {
//     "subscribe": 1,
//     "ticks": "R_50"
//   },
//   "msg_type": "tick",
//   "tick": {
//     "ask": "373.7952",
//     "bid": "373.7552",
//     "epoch": "1517437458",
//     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
//     "quote": "373.7752",
//     "symbol": "R_50"
//   }
// }
// 
// {
//   "echo_req": {
//     "subscribe": 1,
//     "ticks": "R_50"
//   },
//   "msg_type": "tick",
//   "tick": {
//     "ask": "373.8638",
//     "bid": "373.8238",
//     "epoch": "1517437460",
//     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
//     "quote": "373.8438",
//     "symbol": "R_50"
//   }
// }
// 
// {
//   "echo_req": {
//     "subscribe": 1,
//     "ticks": "R_50"
//   },
//   "msg_type": "tick",
//   "tick": {
//     "ask": "373.7636",
//     "bid": "373.7236",
//     "epoch": "1517437462",
//     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
//     "quote": "373.7436",
//     "symbol": "R_50"
//   }
// }
// 
// {
//   "echo_req": {
//     "subscribe": 1,
//     "ticks": "R_50"
//   },
//   "msg_type": "tick",
//   "tick": {
//     "ask": "373.6870",
//     "bid": "373.6470",
//     "epoch": "1517437464",
//     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
//     "quote": "373.6670",
//     "symbol": "R_50"
//   }
// }
// 
// Success.