问题标签 [websocket++]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1000 浏览

c++ - 如何处理多个 websocket++ 选项卡/窗口?

我正在尝试创建一个使用 websocket++ 作为其“总骨干”的站点,我刚刚意识到,如果用户打开多个选项卡/窗口,我可能会陷入两难境地。

我正在编写spa样式,其中所有 html 和大多数 css 和 js 都是预先加载的,并且每当用户单击像上面的堆栈链接之一这样的链接时,它只会滑开旧的div并滑入新的。使用 ajax 很容易,但是任何使用 100% ajax 的人都知道不断更新的地狱。

Websockets 和 websocket++ 使自动更新和用户跟踪变得容易,但我不知道如何处理用户不喜欢我所有的 spa 编程并想要另一个选项卡/窗口大声笑的情况。

如果用户打开另一个选项卡/窗口,websocket++ 会自动分配另一个选项卡/窗口connection_hdl吗?如果是这样,我如何确保用户登录到新的选项卡/窗口?如果没有,我如何分离每个选项卡/窗口的用户跟踪?

0 投票
1 回答
8702 浏览

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

我在 Ubuntu 上工作,我正在用 c++ 编写一个使用 websocket++ 库的服务器,它非常适合来自浏览器的传入 websocket 连接(我在那里使用了 javascript)。

现在我想做一些性能测试并连接很多自动化的“假”客户端。

为此,我想编写一个可以多次启动并连接到该服务器的程序。为此,我尝试了以下代码:

现在,当服务器启动并且假客户端尝试连接时,我只收到以下错误:

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

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

谢谢您的帮助,

孔斯基

0 投票
1 回答
911 浏览

thread-safety - Boost:condition_variable.notify_one() 导致分段错误 11 异常

我正在尝试运行一个 websocket++ 示例,该示例包括从 websocket 客户端接收消息并向所有连接的客户端广播,但是我遇到了线程同步问题。

在代码示例中,方法 process_messages 等待 std:queue 上的消息

并且 on_message 处理程序在推送从客户端接收到的新消息之前锁定队列,但是当它尝试 notify_one() 时,程序失败并出现分段错误 11。

该程序工作的唯一方法是评论等待(锁定),但我不确定这是否安全。

有些人可以帮助我找到去分割错误的原因吗?

完整的代码是:

0 投票
2 回答
186 浏览

c++ - 类型为将在 boost::bind 中使用的函数指针

我正在围绕 websocket++ 库做一个消息传递库。这个库允许我设置自己的函数来管理消息。由于我没有做将使用我的代码的最终应用程序,因此我还需要允许我的用户为此处理程序设置他们想要的功能。

这就是它现在的工作方式。某处有一个 socket(m_client) 类,它有他的 set_handler 函数,它的使用就像下面的代码片段一样。

我想做的是提供一个将作为参数 &myFunction 的函数,因此用户只需调用如下:

然后这将是声明:

但是我无法弄清楚哪个是 myfunction 的正确类型以便使其编译。或者,即使这是存档的好方法。我浏览了 boost 代码,看看是否能得到一些提示……但是当它结束使用模板时,那是我还没有管理的东西。

我知道让用户自己进行绑定并传递其输出可能会更简单,但是 m_client 不能直接访问,我想保持这种方式用于封装建议。我想现在这不是绝对必要的,也许有一天我会需要它。因此,在学习的建议中,我决定以任何方式提出。

对于这种级别的使用,我对 C++ 还是很陌生,整个函数指针、处理程序和模板与我的实际理解有点不同。我阅读了有关绑定用法的信息,但所有示例都包括声明一个函数然后直接使用绑定。

还搜索了一个类似的问题,但如果它存在就没有找到。而且我不会否认我的方法不是最好的或完全错误的,因此欢迎所有建议和建议。

0 投票
1 回答
841 浏览

c++ - MtGox API 和 websocketpp

我无法通过名为websocketpp的 WebSockets C++ 库从 MtGox API 获取信息:

输出

[2013-11-18 23:10:10] [connect] 连接成功

[2013-11-18 23:10:14] [错误] 服务器握手响应无效:HTTP 状态无效。

[2013-11-18 23:10:14] [断开连接] 失败:HTTP 状态无效。

在调试器中,我看到“403 禁止”错误,但我可以通过http://www.websocket.org/echo.html等服务使用它。

我已经尝试使用“ws://socketio.mtgox.com:80/mtgox?Currency=EUR”,但收到以下错误:

[2013-11-18 23:18:07] [connect] 连接成功

[2013-11-18 23:18:08] [错误] handle_read_http_response 中的错误:文件结束

[2013-11-18 23:18:08] [断开连接] 失败:文件结束

这段代码有什么问题?

0 投票
2 回答
196 浏览

c++ - 有没有办法强制浏览器使用 websocket++ 接受自签名证书?

我正在使用带有 Chrome 客户端的 echo_server_tls 示例。当我将证书添加到 certmgr 中的“受信任的根证书颁发机构”时,它工作正常。但是,如果没有在此处添加证书,则连接会静默失败。

如果出现“证书颁发机构”错误,我如何要求用户接受我的证书?

我的操作系统是 Windows 7

0 投票
2 回答
1047 浏览

c++ - 正确的 set_socket_init_handler 语法或修改源以使用 websocket++ 打开 TCP_NODELAY

我在实现示例代码以为 websocket++ 端点打开 TCP_NODELAY 时遇到问题。

这是一个客户端示例,这是一个服务器示例

示例按预期编译和工作,testee并且debug示例经常按预期编译和工作。

我尝试过on_socket_init两种方式都设置处理程序,但每次都得到几乎相同的错误。一组这样的错误是:

我看过另一个帖子,另一个开发人员声称它正在运行,因为我不完全理解这种语法

我不确定如何开始诊断这个问题。

如何解决上述错误?

注意我正在实施 TLS。

需要的代码

我最感兴趣的是合并这个函数的内容

有没有办法修改,以便默认进行此设置?

0 投票
1 回答
1488 浏览

websocket - 使用 CC3000 和 socket.io 创建 websocket 时服务器未发送 HTTP 101 响应

我正在使用 socket.io 将 CC3000 连接到 node.js 服务器。我使用以下库创建了一个 websocket https://github.com/chadstachowicz/socket_io_arduino_cc3000

在 SocketIOClient.cpp 中,它创建一个 TCP 连接,获取一个 session-id(sid)。它断开连接并创建另一个 TCP 连接,并使用 sid 将连接升级到 websocket。为此,客户端(此处为 CC3000)发送以下标头信息:

在此请求之后,客户端等待来自服务器的 HTTP 101 响应。但是服务器没有发送任何响应。它记录为警告“ websocket 连接无效”并结束连接。

用于创建 websocket 的协议是否正常,或者标头中是否缺少任何信息?

另外,我想知道'Origin'的值应该是什么?在第一次握手时它是“Arduino”,而在第二次握手时它是“ArduinoSocketIOClient”。

0 投票
1 回答
155 浏览

c++ - Application on another system crashes on startup without error message for sudo, Segmentation Fault for non-sudo

I have written a websocket++ server on Ubuntu 13.10 and am trying to execute it on Linux Mint 16.

I have installed all dependencies, and the first line under main is a cout which never fires.

This is the compile command:

If I execute with sudo to use restricted ports, it fails immediately without error returning to the command line.

If I execute without sudo, is prints Segmentation Fault and fails immediately to the command line.

The directories in ~/Dgn are present on the new system.

I did a quick, simple test and checked to see if a basic websocket++ example could compile and execute normally, and it was successful.

Both systems are 64-bit. The only difference are the distros, but Linux Mint 16 is based upon Ubuntu 13.10, and all commands to setup were identical.

How can this be compiled so that it can execute on another system?


As a further test, I compiled it on the new system, and it works.

Is it not possible to compile on one system and run on another?

GDB

0 投票
1 回答
391 浏览

c++ - 如何以 websocketpp::connection_hdl 为键实现 boost::unordered_map?

对于我的应用程序,将 s 的映射作为映射中的键保存更加方便和合乎逻辑websocketpp::connection_hdl,但我发现这可能具有潜在危险,因为它们是weak_ptrs。

但是,有人声称如果密钥过期, aboost::unordered_map可能不会中断。weak_ptr

真的吗?如果是这样,如何构造一个以将connection_hdls 作为键以及插入、擦除和查找/计数?此外,能够循环通过它们需要什么,例如使用for?

这目前超出了我的技能范围,所以我不确定我在看什么。