Использование библиотеки websocketpp для подключения к серверу websocket С++

Я работаю над Ubuntu и пишу сервер на С++, который использует библиотеку websocket++, которая отлично работает для входящих соединений через веб-сокеты из браузеров (там я использовал javascript).

Теперь я хочу провести несколько тестов производительности и подключить множество автоматических «фальшивых» клиентов.

Для этого я хотел написать программу, которая запускается несколько раз и подключается к этому серверу. Для этого я попробовал следующий код:

#include "websocketpp/src/roles/client.hpp"
#include "websocketpp/src/websocketpp.hpp"

#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/thread.hpp>

#include "FakeClient.h"

using boost::asio::ip::tcp;
using websocketpp::client;


FakeClient::FakeClient()
{
    thisPointer = boost::shared_ptr<FakeClient>(this);

    client endpoint(thisPointer);

    endpoint.alog().unset_level(websocketpp::log::alevel::ALL);
    endpoint.elog().unset_level(websocketpp::log::elevel::ALL);

    endpoint.elog().set_level(websocketpp::log::elevel::RERROR);
    endpoint.elog().set_level(websocketpp::log::elevel::FATAL);

    endpoint.connect("ws://localhost:9001/");

    boost::thread t(&FakeClient::run, *this);

    t.join();
}

void FakeClient::run()
{
    while(true)
    {
        // send stuff here
        usleep(100);
    }
}

Теперь, когда сервер запущен и поддельные клиенты пытаются подключиться, я получаю только следующую ошибку:

2013-04-23T16:00:02 [2] fail_on_expire timer expired with message: Timeout on WebSocket handshake

Однако, когда сервер не запущен, сообщение об ошибке не появляется, поэтому определенно происходит какое-то соединение. Но я не могу понять, что я делаю неправильно. Можно ли вообще легко подключить 2 бинарные программы через библиотеку websocket++?

Думаю, для достижения наилучших результатов тестирования производительности веб-сокеты следует использовать для связи между сервером и поддельными клиентами.

Спасибо за помощь,

Кунши


person Koonschi    schedule 23.04.2013    source источник
comment
Вы шпионили за обменом http? было бы полезно   -  person ldgorman    schedule 23.04.2013
comment
веб-сокеты поддерживают двоичные файлы как Полная поддержка: RFC6455   -  person ldgorman    schedule 23.04.2013
comment
попробуй увеличить таймаут в конфиге для сервера   -  person ldgorman    schedule 23.04.2013
comment
это может быть полезно вам, тестовому серверу/клиенту   -  person ldgorman    schedule 23.04.2013


Ответы (1)


Автор WebSocket++ здесь. WebSocket++ определенно может разговаривать сам с собой. Я создал несколько примеров, чтобы продемонстрировать, как это сделать. Взгляните на следующие два (Примечание: в этих примерах используется самая последняя версия библиотеки 0.3.x).

Клиент телеметрии: этот клиент подключается к указанному серверу WebSocket и отправляет сообщение раз в секунду. https://github.com/zaphoyd/websocketpp/blob/experimental/examples/telemetry_client/telemetry_client.cpp

Сервер печати: этот сервер прослушивает подключения и распечатывает все полученные сообщения. https://github.com/zaphoyd/websocketpp/blob/experimental/examples/print_server/print_server.cpp

person zaphoyd    schedule 23.04.2013