问题标签 [asio]

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 投票
0 回答
305 浏览

performance - 使用 Boost Asio 传输 UDP 数据包的低速(带宽)

下面是一个我用boost asio写的异步UDP客户端和服务器的例子,用来测试asio性能(速度)。服务器是一个简单的程序,它回显从客户端收到的消息,如下所示:

异步 UDP 服务器:

客户端只需以异步模式向服务器发送消息并等待回复并从服务器接收回显支持的消息。我使用 chrono 来计算发送和接收消息的经过时间。

客户端代码如下:

编译和执行服务器:

编译和执行客户端:

在同一台机器(本地主机)上运行服务器和客户端时,我想知道为什么 boost asio 的性能如此差,因为它需要 80 微秒(平均)来发送和接收 36 字节(28 字节用于标头 + 8 字节用于数据) 相当于3.4 Mbits/sec !!!!

有什么方法可以提高 UDP 套接字性能或任何其他技巧来优化代码?

0 投票
1 回答
291 浏览

c++ - 提升 asio 一对多连接

我正在尝试为我们的基础架构开发内部扫描仪,当时我已经开始研究 boost asio 以启动 254 连接。

我在 boost asio 文档中没有找到任何可以为我指明正确方向的示例。

我想创建一个对象的 254 个实例,每个实例都使用 async_read_until 连接和读取,使用 io_service。

从 boost 中使用多个 tcp::resolver 和多个 tcp::socket 的正确方法是什么(理想情况下每个类一个?)

我还看到一些关于解析器和插座不可移动的投诉

我有非常基本的代码,不太确定下一步该去哪里……我将不胜感激。谢谢。

主.cpp:

收割机.hpp:

收割机.cpp

0 投票
1 回答
2059 浏览

c++ - Boost::ASIO VS Qt 网络

我想做一些网络应用程序。我想用Qt,但是它的网络库比较大,然后我尝试学习Boost::asio,但它似乎有相同的大小

什么是占用空间小的库?尽可能小?我可以使用 Boost:ASIO 或 Qt 并以某种方式将它们简化为小尺寸吗?我需要我的应用程序小于 1MB,(如果可能的话,甚至更小)

0 投票
1 回答
1232 浏览

c++ - boost::asio::async_read 无限循环,接收数据为零字节

我正在尝试编写基于 IO_Service 的异步 TCP 客户端,其中 Async_write 工作正常,但 async_read 在无限循环中运行。在我尝试纠正这个问题的过程中,我发现在所有其他情况下 async_read 只是停止接收数据,在我停止服务器之前它什么也没有收到。以下是我在发布查询之前尝试过的代码和链接。

我尝试的建议我的2、3完全相同,但在所有情况下,我的async_read处理程序都没有读取任何内容。在一种也是唯一一种情况下,当我设置缓冲区时,它会启动无限循环,就像 我尝试过的其他情况一样,并且没有引发 async_read 处理程序。 boost::asio::mutable_buffer bytes;boost::array<char, 512> bytes;boost::asio::streambuf bytes;char bytes[512];

在经历了所有这些解决方案之后,我现在很困惑:会不会是缓冲区的问题?在传递给 read 之前我需要初始化它吗?

请指导。

0 投票
2 回答
688 浏览

asio - asio streambuf 可变缓冲区类型 - 如何使用 prepare()

使用独立的 asio,我用 read_some 实现了一个服务器。我的服务器循环累积从套接字接收到的所有数据。下面的精简代码不能正常工作,但我可以通过将 inbuf.prepare() 语句移动到循环中来修复它。

当 prepare() 在循环之外并且自建立连接以来读取的总字节数越过 4096 边界时,字符串 s 将仅具有到达该边界的数据。换句话说,s 将比 bytes_read 短。我推测如果我想将 prepare() 保留在循环之外,我需要一个如下所示的消费循环,但这也不起作用。

谁能澄清 prepare() 的作用,以及为什么需要重复调​​用它?

0 投票
1 回答
255 浏览

c++ - 如何使用已经存在的 tcp::socket 创建 tcp::iostream?

我什至不确定这个问题是否有意义,但我正在尝试解决以下问题,而不必重写大部分代码。

我有一个 tcp 服务器,它使用带有 boost::asio::async_read_until 和 boost::asio::write 函数的 tcp::socket 进行读写。现在有一个用例可以从文件流式传输到此套接字。tcp::iostream 是执行此操作的理想方式;我可以使用当前打开的 tcp::socket 创建一个实例吗?

0 投票
2 回答
1374 浏览

c++ - Multiple Boost::ASIO async_send_to in one go

I want to increase the throughput of my udp gameserver which uses Boost ASIO. Right now, everytime i need to send a packet, i am putting it in a queue, then checking if there is a pending async_send_to operation, if yes, do nothing, if not, call async_send_to. Then i wait for the write handler to be called and then call async_send_to for the next packet in queue, if any.

The documentation says that it is the way to do it "for TCP socket", but there is NOTHING on the whole internet about UDP socket. Try it, search it on stackoverflow, you will see nobody talks about this, and for the 2 questions you will find, the question is left ignored by users.

Why is it kept a secret? And for the 1million dollar question, can i safely call async_send_to multiple time in a row WITHOUT waiting for the write handler to be called?

Thanks in advance.

0 投票
1 回答
1125 浏览

c++ - C++ boost::asio https 通过代理

所以我有这段代码可以很好地使用 boost::asio 与 ssl 连接:

打开 Fiddler,但我根本看不到这些联系。从我读到的内容中,我收集到我必须通过代理传递请求。所以我尝试了所有我能找到的例子和答案,但我无法让它发挥作用。

我得到的最好的结果是握手从未触发回调。

我错过了什么?

0 投票
1 回答
412 浏览

c++ - Boost.Asio:用不同的`strand`s包裹几次

假设我有两个连接,每个连接都有各自strand的线程安全性。这些连接不是单独运行的,它们可以以某种方式相互交谈。在此通信阶段,处理程序必须同步,这样没有两个处理程序可以同时修改连接对象。

那么,为了实现这一点,我可以strand::wrap嵌套使用两个 s 吗?

例如,考虑以下伪代码:

0 投票
1 回答
128 浏览

c++ - buffered_stream::buffered_stream 构造函数中的 Arg & a 是什么?

http://www.boost.org/doc/libs/1_41_0/doc/html/boost_asio/reference/buffered_stream/buffered_stream.html

我正在考虑将它用作 tcp 流和 can 总线之间的中间缓冲区。我将缓冲区传递给与写入 can 总线有关的 API,后者使用 async_reads 获取数据。tcp 端使用 async_writes 写入缓冲区。