我如何分配一个字符串来提升 beast multi_buffer?
How do I assign a string to boost beast multi_buffer?
我找到了许多示例,说明如何将 boost::beast::multi_buffer 的内容复制到字符串,但是如何将字符串的内容分配给之前在中创建的 multi_buffer一个 class 个实例?
如果我的 class 中有示例声明:
private:
boost::beast::websocket::stream<boost::asio::ip::tcp::socket> ws_;
boost::asio::strand<boost::asio::io_context::executor_type> strand_;
boost::beast::multi_buffer buffer_;
如何在调用之前将字符串分配给 buffer_:
ws_.async_write(buffer_.data(), boost::asio::bind_executor(strand_,
std::bind(&CNXG_session::on_write,
shared_from_this(),
std::placeholders::_1,
std::placeholders::_2)));
你可以在prepare
之后使用boost::asio::buffer_copy
:
size_t n = buffer_copy(b.prepare(contents.size()), boost::asio::buffer(contents));
演示
#include <iostream>
#include <boost/asio/buffers_iterator.hpp>
#include <boost/beast.hpp>
using boost::beast::multi_buffer;
void dump_buffer(std::ostream& os, multi_buffer const& mb) {
os << mb.size() << " (" << mb.capacity() << ") "
<< "'" << boost::beast::buffers(mb.data()) << "'\n";
}
int main() {
boost::beast::multi_buffer b;
dump_buffer(std::cout << "before: ", b);
std::string const contents = "Hello world";
size_t n = buffer_copy(b.prepare(contents.size()), boost::asio::buffer(contents));
b.commit(n);
dump_buffer(std::cout << "after: ", b);
}
版画
before: 0 (0) ''
after: 11 (512) 'Hello world'
注意:也许您会对 Boost asio 1.66.0 中的新缓冲设施感兴趣:dynamic_buffer
(Dynamically sized boost::asio::buffer)
您还可以使用 boost::beast::ostream
函数将 DynamicBuffer 转换为 std::ostream
您可以写入:
boost::beast::multi_buffer b;
boost::beast::ostream(b) << "Hello, world!\n";
我找到了许多示例,说明如何将 boost::beast::multi_buffer 的内容复制到字符串,但是如何将字符串的内容分配给之前在中创建的 multi_buffer一个 class 个实例?
如果我的 class 中有示例声明:
private:
boost::beast::websocket::stream<boost::asio::ip::tcp::socket> ws_;
boost::asio::strand<boost::asio::io_context::executor_type> strand_;
boost::beast::multi_buffer buffer_;
如何在调用之前将字符串分配给 buffer_:
ws_.async_write(buffer_.data(), boost::asio::bind_executor(strand_,
std::bind(&CNXG_session::on_write,
shared_from_this(),
std::placeholders::_1,
std::placeholders::_2)));
你可以在prepare
之后使用boost::asio::buffer_copy
:
size_t n = buffer_copy(b.prepare(contents.size()), boost::asio::buffer(contents));
演示
#include <iostream>
#include <boost/asio/buffers_iterator.hpp>
#include <boost/beast.hpp>
using boost::beast::multi_buffer;
void dump_buffer(std::ostream& os, multi_buffer const& mb) {
os << mb.size() << " (" << mb.capacity() << ") "
<< "'" << boost::beast::buffers(mb.data()) << "'\n";
}
int main() {
boost::beast::multi_buffer b;
dump_buffer(std::cout << "before: ", b);
std::string const contents = "Hello world";
size_t n = buffer_copy(b.prepare(contents.size()), boost::asio::buffer(contents));
b.commit(n);
dump_buffer(std::cout << "after: ", b);
}
版画
before: 0 (0) ''
after: 11 (512) 'Hello world'
注意:也许您会对 Boost asio 1.66.0 中的新缓冲设施感兴趣:dynamic_buffer
(Dynamically sized boost::asio::buffer)
您还可以使用 boost::beast::ostream
函数将 DynamicBuffer 转换为 std::ostream
您可以写入:
boost::beast::multi_buffer b;
boost::beast::ostream(b) << "Hello, world!\n";