草庐IT

asio-acceptor

全部标签

c++ - 如何将 boost::asio::tcp::io_stream 附加到我的 io_service?

我习惯使用boost::asio::ip::tcp::socket我在哪里construct他们用io_service.这很有用,因为我有一个用于所有套接字的io_service,并且这些套接字共享一个线程池。现在,我正在尝试使用boost::asio::ip::tcp::io_stream,我希望它在同一个线程池中执行所有异步工作。但是,似乎不可能construct带有外部io_service的tcp::io_stream。底层套接字确实使用了内部初始化的io_service。有没有办法让我继续使用集中管理的io_service和tcp::io_stream?我使用的是boost版本

c++ - 链接 boost.asio

我在链接boost.asio时遇到问题。它使用boost.system并且链接器错误以:/boost_1_39_0/boost/system/error_code.hpp:205:对`boost::system::get_system_category()'的undefinedreference这意味着我需要链接boost.system。我已经构建了boost,现在我有几个lib文件。boost_system-mgw32-d-1_39.dll和库libboost_system-mgw34-d-1_39.liblibboost_system-mgw34-mt-d-1_39.liblibb

c++ - 我如何强制 boost::asio 优先完成 async_write 调用而不是运行其他处理程序?

我正在使用boost::asio(不经意的传输方案)实现一组简单的协议(protocol)。这些在运行时受CPU限制。为了boost效率,我想尽量让两台主机都工作。如果主机A可以在执行两项任务之间做出选择,其中一项会让主机B开始计算,而另一项则不会,我希望主机A选择前者。目前,io_service在async_writes之前运行计算密集型处理程序。除非tcp窗口已满(或某些类似情况正在阻止向socker写入数据),否则完成async_write比运行其他处理程序几乎肯定更好。我看过asio的处理程序优先级队列示例。重新实现async_write以使用这样的优先级队列是解决我的问题的唯

c++ - boost::asio 在线程中启动不同的服务?

似乎所有示例总是显示在所有线程中运行相同的io_service。可以启动多个io_services吗?这是我想做的:在处理用户输入的主线程中启动io_serviceA...在另一个线程中启动另一个io_serviceB,然后可以启动一堆worker线程都共享io_serviceB。io_serviceA上的用户可以“发布”io_serviceB上的工作,以便它在工作池上完成,但io_serviceA(即主线程)上不会完成任何工作。这可能吗?这有意义吗?谢谢 最佳答案 根据我的经验,如果每个cpu一个io_service或每个进程一个

c++ - 是否有用于 Boost::asio 的 Web 框架?

用C++做web开发听起来有点奇怪,但是随着node.js的流行,我认为C++做web的东西是合理的。node.js类似于Boost::asio,它们都是异步的并且具有高性能。我认为C++拥有自己的基于Boost::asio的Web框架是很自然的。那么是否有针对Boost::asio的Web框架,如Express、Geddy?为什么不呢? 最佳答案 有pion,这是一个用C++编写的基于boost::asio的HTTP服务器。您可以将其用作C++Web框架的起点。 关于c++-是否有用于

c++ - Boost Asio 回调不会被调用

我正在使用Boost.Asio进行网络操作,它们必须(实际上,可以,没有复杂的数据结构或任何东西)保持相当低的水平,因为我负担不起序列化开销(和库)我发现确实提供了足够好的性能似乎不适合我的情况)。问题出在我从客户端执行的异步写入(在QT中,但这可能与此处无关)。async_write中指定的回调永远不会被调用,我完全不知道为什么。代码是:voidSpikingMatrixClient::addMatrix(){std::coutui->editNetworkSize->text().toInt();std::ostreamout(&buf);out.write(reinterpret

c++ - 使用 Boost Asio 的快速数据(图像)传输服务器客户端

我是网络编程的新手,对使用BoostAsio在客户端和服务器之间连续快速传输数据(图像)的最佳实践有一些疑问。重要的一点,我们不能应用会降低图像质量的压缩。我们使用专用网络(54MBit),除我们之外没有其他流量。我们被推荐使用BoostAsio,因为它似乎适合我们的需要。然而,由于Boost非常强大,它对像我这样没有经验的(Boost)开发人员来说是一个挑战。我们想开发一种尽可能简单的工具,它可以在客户端和服务器之间尽可能快地连续发送图像数据。基本上它是流媒体。我们更愿意使用TCP,但如果我们可以使用UDP获得显着的性能提升,我们不会介意偶尔丢失数据包。数据是一个无符号字符缓冲区(6

c++ - boost::asio UDP "gather"操作

async_receive()的boost::asio文档声明它支持“一次接收到多个缓冲区”,虽然我可以编写代码,但实际上看不到它是如何(或是否)工作的。我们遇到这样一种情况,我们的一家供应商每秒向我们发送数千个UDP数据包,这足以让我们在某些情况下看到“接收到的数据包被丢弃”数量激增。如果我们真的可以在一次async_receive()调用中填充多个缓冲区,那将是理想的,但在测试过程中,似乎即使指定了多个缓冲区,也只会为一个数据报调用处理程序。我已经包含了我的测试代码,抱歉它太冗长了,但我需要它能够灵活地监听多个接口(interface)/多播。#include#include#in

c++ - 为什么这个 ASIO 示例使用成员变量来传递状态而不是使用绑定(bind)?

在ASIOHTTPServer3example有这样的代码:voidserver::start_accept(){new_connection_.reset(newconnection(io_service_,request_handler_));acceptor_.async_accept(new_connection_->socket(),boost::bind(&server::handle_accept,this,boost::asio::placeholders::error));}voidserver::handle_accept(constboost::system::e

c++ - boost ASIO,SSL : How do strands help the implementation?

TLDR:Strands序列化跨完成处理程序共享的资源:这如何防止ssl::stream实现并发访问SSL上下文(内部使用)以用于并发读/写请求(stream::ssl不是全双工的)?请记住,strands仅序列化完成处理程序调用或读/写请求的原始队列。[感谢sehe帮助我更好地表达这一点]我花了一天的大部分时间阅读有关ASIO、SSL和strands的内容;主要是关于stackoverflow(其中有一些非常详细且表达明确的解释,例如WhydoIneedstrandperconnectionwhenusingboost::asio?)和Boost文档;但有一点仍不清楚。显然,stra