以下是来自http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio/?pg=10的boost :: asio教程的Connection类的摘录。
class Connection : public boost::enable_shared_from_this< Connection >
{
friend class Acceptor;
friend class Hive;
private:
boost::shared_ptr< Hive > m_hive;
boost::asio::ip::tcp::socket m_socket;
boost::asio::strand m_io_strand;
boost::asio::deadline_timer m_timer;
boost::posix_time::ptime m_last_time;
std::vector< uint8_t > m_recv_buffer;
std::list< int32_t > m_pending_recvs;**
std::list< std::vector< uint8_t > > m_pending_sends;
int32_t m_receive_buffer_size;
int32_t m_timer_interval;
volatile uint32_t m_error_state;
要将数据写入此tcp套接字,请将向量传递并复制到pending_sends成员列表。稍后,使用vector作为参数创建boost :: asio :: buffer。
我想编辑这个类,以便能够将1个缓冲区的内容写入多个连接,而无需为每个套接字复制底层内存。以下步骤是否合理?
首先创建一个shared_ptr到某种数据结构,可以作为缓冲区的基础(std :: streambuf,std :: string,std :: vector)
将shared_ptr复制到我要将其内容写入的每个连接类。
使用shared_ptr
调用socket.async_write
特别是,我对缓冲区/流的概念非常朦胧。我不知道为什么我应该从1种类型的对象而不是另一种对象创建一个boost :: asio :: buffer。有没有特别的理由为什么这段代码的作者选择了`std :: vector?如果我通过调用写入ostream的序列化函数来获取数据,那么最好使用std :: streambuf吗?我很感激任何有助于清理缓冲区概念的资源。