Skip to content

Web Socket

Robert Schumacher edited this page Apr 1, 2016 · 2 revisions

WebSocket Client

Everything for using websockets is located in the ws_client.h header file inside the web and web::websockets::client namespaces.

#include <cpprest/ws_client.h>
using namespace web;
using namespace web::websockets::client;

The websocket_clientclass is used to create and maintain a connection to a WebSocket endpoint. Once you have your client, you must connect to the remote endpoint using the connect() function and pass in a URI specifying where this client wants to connect. This function returns a pplx::task which can be waited upon.

websocket_client client;
client.connect(U("ws://localhost:1234")).then([](){ /* We've finished connecting. */ });

Once the client is connected, you can start sending and receiving data. Like the rest of the C++ Rest SDK, this is done in an asynchronous way.

websocket_outgoing_message msg;
msg.set_utf8_message("I am a UTF-8 string! (Or close enough...)");
client.send(msg).then([](){ /* Successfully sent the message. */ });

client.receive().then([](websocket_incoming_message msg) {
    return msg.extract_string();
}).then([](std::string body) {
    std::cout << body << std::endl;
});

(Note: only one receive() call will be fulfilled per received message)

We support sending and receiving string and binary messages.

websocket_outgoing_message msg;
concurrency::streams::producer_consumer_buffer<uint8_t> buf;
std::vector<uint8_t> body(6);
memcpy(&body[0], "a\0b\0c\0", 6);

auto send_task = buf.putn(&body[0], body.size()).then([&](size_t length) {
    msg.set_binary_message(buf.create_istream(), length);
    return client.send(msg);
}).then([](pplx::task<void> t)
{
    try
    {
        t.get();
    }
    catch(const websocket_exception& ex)
    {
        std::cout << ex.what();
    }
});
send_task.wait();

Once you're done with the client, you should close it.

client.close().then([](){ /* Successfully closed the connection. */ });

Sometimes if you need to receive a lot of messages from the server it can be tedious and error prone to repeatedly call websocket_client::receive() and handle each task. We have another class websocket_callback_client that allows setting a callback for messages from the server. Here is a simple example registering a callback:

websocket_callback_client client;
client.connect(U("ws://localhost:1234")).then([](){ /* We've finished connecting. */ });

// set receive handler
client.set_message_handler([](websocket_incoming_message msg)
{
    // handle message from server...
});
Clone this wiki locally
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy