问题标签 [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 回答
815 浏览

c++ - 在 WebSocket++ 中关闭连接后出错

我有这个:

在 WebSocket++ lib 中由服务器(而不是浏览器客户端)关闭连接后。服务器仍然可以工作,但我该如何解决这个错误?

服务器代码: http: //pastebin.com/acbrjLvF

0 投票
0 回答
1457 浏览

c++ - 多线程 websocket++ 服务器崩溃

我修改了websocket++ 回显服务器示例以使用多个线程:

我使用一个异步发送许多消息的客户端进行连接。然后服务器崩溃:

Thread Safety 上的 websocket++ 手册来看,我所做的应该是线程安全的:

Asio 传输为端点提供完整的线程安全性。使用 io_service 线程池,其中多个线程正在调用 io_service.run();

...

所有核心传输都保证给定连接的处理程序将被序列化。当传输和并发策略支持端点并发时,任何涉及 connection_hdl 的东西都应该是线程安全的。ie 可以安全地将connection_hdls 传递给其他线程,无限期地存储它们,并随时从任何线程调用将它们作为参数的端点方法。

我在这里想念什么?


我使用的客户端是基于 NodeJS 的:

客户端.js

通过以下方式开始:

0 投票
2 回答
368 浏览

c++ - 如何将每个线程的用户数据传递给 asio 处理程序?

我有一个基于 websocketpp(基于 ASIO)的服务器和一个线程池。我需要分配一些资源(连接到数据库等),并确保它们将始终在同一个线程中完全使用。

所以,这是我目前拥有的:

main()函数的某个地方:

如您所见mongo::Client,每个线程都有一个实例化。我的目标是将引用/指针传递给它(或将来可能添加的任何其他资源)并接收它Server::onMessage(作为附加参数)。

我完全不知道如何做到这一点。另外,我不想创建像mongo::Client * Server::acquire()/这样的分配器接口Server::release(mongo::Client *),因为它需要额外的同步。我的意图是访问(如何?)处理程序中的某种每线程“用户数据” Server::onMessage

0 投票
0 回答
1259 浏览

c++ - 让 WebSocketC++ 工作

WebSocket C++ 是一个用于 Web 套接字的 C++ 库。图书馆位于此处。该库只是标题,所以我不需要编译它,但是我确实需要 OpenSSL 和 Boost。我使用的 Boost 版本是 1.61。我在项目中加入了 boost,这消除了一堆错误。然后我需要安装 OpenSSL,因为它给了我一个

fatal error C1083: Cannot open include file: 'openssl/conf.h': No such file or directory.

我试图编译 OpenSSL,但我无法编译。我不断收到错误消息,因此我找到了 OpenSSL 的预构建二进制文件。我下载了它们并在 Visual Studio 中进行了设置(包括路径和库),然后我开始遇到一堆错误。

https://prntscr.com/f33defhttp://prntscr.com/f33dwa(抱歉格式错误)

我使用的示例代码来自他们的 github 页面(examples->debug_client)

我想做的是从我的应用程序到另一个网站(Discord API)套接字接口设置一个简单的 websocket,这样我就可以通过我的应用程序和他们的 API 进行通信。

我究竟做错了什么?我整天都在努力解决这个问题,不胜感激。

[更新]我也没有找到太多关于这方面的信息。

0 投票
1 回答
326 浏览

c++ - WebSocket++ 服务器结束,但端口说仍在使用中

目前,我通过关闭(或刷新)客户端浏览器选项卡来结束我的服务器。在服务端调用WebSocket关闭函数时,服务端停止监听,关闭所有连接等,退出。这是代码:

在上面的代码片段中,我正在遍历所有“玩家”(连接的客户端)。的使用是p->io指一个websocketpp::connection_hdl.

但是,当我再次运行服务器时,出现此错误:

我必须等待几分钟才能再次使用服务器。这在生产中既烦人又具有潜在危险。

任何想法可能会发生什么?

0 投票
0 回答
131 浏览

c++ - ISR 无法识别 Websocket++ websocket 服务器类成员函数

我正在使用 Odroid(类似 Raspi 的 ARM 板)来运行基于 SPI 的小型无线电芯片,该芯片将数据发送到 Websocket 等。这是使用 Websocket++ 应用的:https ://github.com/zaphoyd/websocketpp 。我对其中一个简单的例子进行了混蛋,它向所有客户端发送服务器消息。该程序有一个处理 websocket 的 count_server 类,还有一个由 WiringPi 处理的 ISR,它调用嵌套函数来处理不同的操作。

我遇到的问题是,为了发送这条消息,据我所知,发送函数必须在 count_server 类中,以访问客户端地址等。这个类方法不能从我的 ISR 内部访问,它处理从无线电接收的所有数据,所以当我尝试从 ISR 内部发送 websocket 消息时,我收到错误:

webSocketServer 是类 count_server 的一个实例,在 main() 中实例化。为什么 ISR 不能“看到” webSocketServer 类。

一种解决方法是在 count() 函数内部进行轮询,但这会阻塞 CPU,我宁愿让它准备好执行其他任务。]

这是我能产生的最简单的例子。attachInterrupt 需要 Websocket++ 和 WiringPi。

0 投票
1 回答
2241 浏览

c++ - websocketpp asio监听错误

我有一个多线程的 websocketpp 服务器。当我退出程序并重新启动时,没有连接任何客户端,它可以正常工作。

但是,当连接客户端并且我退出/重新启动时,程序会抛出此错误

我相信我有一个正确的断开序列,当我启动退出序列时,我有以下消息(我自己的调试信息)

asio 错误是什么意思?我希望有人以前见过这个,以便我可以开始进行故障排除。谢谢!

编辑:我正在调整股票 broadcast_server 示例,其中

关闭连接的代码。

同样在广播服务器类的析构函数中,我有一个m_server.stop()

0 投票
0 回答
373 浏览

c++ - WebSocket++ 广播服务器示例中的线程安全

我正在尝试了解 WebSocket++ 库的广播服务器示例。
我有两个问题:

  1. 为什么m_connections需要锁?
  2. 为什么不直接插入/删除connection_hdlinon_openon_close回调,而不是先将它们添加到队列中,然后将它们添加到m_connectionsin process_messages

这是代码中最重要的部分:

0 投票
1 回答
142 浏览

c++ - 我不应该看到单线程与多线程 websocketpp 服务器之间的 CPU 使用率差异吗?

我正在使用这样配置的多线程 websocketpp 服务器:

我启动服务器:

添加连接时唯一的实质性区别在于消息发射 [ wssp.send(...)]。越来越多的客户端并没有真正为内部计算增加任何东西。只有要发出的消息量才会增加。

我的问题是,无论我使用 1 个或多个线程,CPU 使用率似乎都没有太大差异。

server.run(1)我用or启动服务器并不重要server.run(4)(都在 4 核 CPU 专用服务器上)。对于类似的负载,CPU 使用率图表显示的百分比大致相同。我期望使用 4 个并行运行的线程来降低使用率。我想错了吗?

在某些时候,我感觉到并行性确实比发射更适用于聆听部分。因此,我尝试将其封闭send在一个新线程(我分离)中,因此它独立于需要它的序列,但它并没有改变图表上的任何内容。

我不应该看到 CPU 产生的工作有什么不同吗?否则,我做错了什么?为了强制从不同的线程发出消息,我是否还缺少另一个步骤?

0 投票
0 回答
555 浏览

c++ - 使用 Websocket++ 绑定到特定的 IP 地址

使用 websocket++ 作为客户端到 websocket 服务器我想使用我的客户端服务器的特定 IP 进行连接。所以我想弄清楚如何绑定到特定的 IP,但它没有成功。

我认为 on_socket_init 处理程序可能用于配置套接字,但是这个处理程序:

导致这种情况发生:

在我的本地机器上,我没有多个 IP,所以我只是想告诉它绑定到我拥有的一个 IP,它现在不应该改变任何东西,除了验证我可以调用 bind()。但是它爆炸了,我不知道为什么。在具有第二个 IP 的服务器上测试我得到了同样的错误。

使用 gdb 我只发现异常是由检查某些内部绑定调用的某些错误代码的函数引发的。我不知道该内部绑定调用的代码在哪里,除了“无效参数”或错误代码 22 之外没有其他信息。这只是无效参数的编号。

尝试分配我的机器上没有的虚假地址会产生不同的错误“绑定:无法分配请求的地址”,所以猜测我传入的地址没问题。

这是这样做的正确方法吗?