使用 websocketpp 库连接到 c++ websocket 服务器

Posted

技术标签:

【中文标题】使用 websocketpp 库连接到 c++ websocket 服务器【英文标题】:Using websocketpp library to connect to a c++ websocket server 【发布时间】:2013-04-23 14:11:48 【问题描述】:

我在 Ubuntu 上工作,我正在用 c++ 编写一个使用 websocket++ 库的服务器,该库非常适合来自浏览器的传入 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

当服务器没有启动时,没有错误信息出现,所以肯定有某种连接发生。但我无法弄清楚我做错了什么。甚至可以通过 websocket++ lib 轻松连接 2 个二进制程序吗?

为了获得最佳性能测试结果,我猜应该使用 websockets 来在服务器和假客户端之间进行通信。

感谢您的帮助,

孔斯基

【问题讨论】:

你窥探过http交换吗?会有用的 websockets 支持二进制为“完全支持:RFC6455” 尝试在你的conf中为服务器增加超时时间 this 可能对你有用,一个测试服务器/客户端 【参考方案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

【讨论】:

以上是关于使用 websocketpp 库连接到 c++ websocket 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Qt 库连接到标准 C++ 项目?

使用 Dask 库连接到 Impala DB

如何使用 sapnwrfc 库连接到 SAP?

无法使用 pyodbc 库连接到 Azure 数据库

使用开源 xmpp 库连接到 nimbuzz 聊天

无法使用 Java SocketFactory 库连接到 Cloud SQL