boost::asio::streambuf 使用 下面是boost文档中的read_unitl()示例:
delimiters可以为a single boost::asio::async_read_until() 示例: posix_chat_client,其它示例:http sync client boost::asio::buffer boost::asio::buffer()不会新分配存储空间,而是直接使用传入boost::array、std::vector、std::string、char[]等类型参数已分配的空间。boost::asio::buffer()返回值为const_buffer或mutable_buffer对象,和buffer对象相关的函数操作有:boost::asio::buffer_size(), boost::asio::buffer_cast() ConstBufferSequence类型 一个自定义的ConstBufferSequence类型实现:shared_const_buffer 异步IO操作中自定义内存分配 asio在执行异步IO操作时 会使用系统函数来动态分配内存,使用完后便立即释放掉;在IO操作密集的应用中,这种内存动态分配策略会较大地影响程序的整体性能。为了避免这个问题,可 以在在应用程序中创建一个内存块供asio异步IO操作使用,异步IO操作通过自定义接口 asio_handler_allocate 和 asio_handler_deallocate 来使用该内存块。 上述例子中使用到了 boost::aligned_storage<1024> storage_ 来管理原始内存。
boost::ip::tcp::iostream 将ip::tcp::iostream绑定到底层的socket上,通过iostream上的输入输出来进行IO操作:daytime_server 和 daytime_client gather-write写操作 "gather-write"即将存放在多个内存块中的数据通过一次系统调用完成所有数据的写操作,相对于多次执行系统调用"gather-write"的IO性能显然更好。
std::vector<boost::asio::const_buffer> buffers;
buffers.push_back(boost::asio::buffer(outbound_header_)); buffers.push_back(boost::asio::buffer(outbound_data_)); boost::asio::async_write(socket_, buffers, handler); 示例2:
static
char eol[] = {
'
\n
' };
boost::array<boost::asio::const_buffer, 2> buffers = {{ // 此处使用2个大括号是为了编译器兼容 boost::asio::buffer(read_msg_.body(), read_msg_.body_length()), boost::asio::buffer(eol) }}; boost::asio::async_write(output_, buffers, boost::bind(&posix_chat_client::handle_write_output, this, boost::asio::placeholders::error)); |
boost::asio学习 - buffer篇
最新推荐文章于 2020-09-22 16:30:47 发布
本文详细介绍Boost.Asio库中的streambuf、buffer等组件的使用方法,并提供了read_until、async_read_until、gather-write等关键API的示例代码,帮助开发者更好地理解和应用Boost.Asio进行高效网络编程。
摘要由CSDN通过智能技术生成