这是真实场景使用boost :: asio进行全双工通信吗?

时间:2016-07-21 15:34:14

标签: c++ boost boost-asio

我正在使用boost::asio库来创建全双工服务器。我想知道这种情况是否可能发生。

  1. 来了一个存储在自己缓冲区中的请求。
  2. 我在自己的缓冲区填充了响应数据。
  3. 我开始异步发送响应。
  4. 提出了新请求。
  5. 我将响应数据填入我之前填写过的相同缓冲区中。
  6. 先前写入操作的缓冲区尚未完成,但新的响应数据已损坏。
  7. 问题是我是否需要为每个写入操作单独使用缓冲区,或者在第3点将缓冲区复制到某种内部缓冲区中,我可以安全地在同一缓冲区中填充新响应?

1 个答案:

答案 0 :(得分:1)

boost :: asio能够进行全双工操作,但你应该仔细管理缓冲区。

一般规则是:

  1. 一次只能对给定套接字执行1次读取操作。
  2. 写操作相同
  3. 因此,您可以同时进行1次写入和1次读取操作。

    您描述的情况应该在单线程环境中工作,因为进程无法添加到缓冲区并使用它来同时写入。但是,有一个技巧:在你追加写入缓冲区后,你无法知道当前的async_write是否完成。你需要启动新的async_write吗?这一刻需要仔细核实。

    P.S。不,asio从不在内部复制缓冲区。