我正在使用boost::asio库来创建全双工服务器。我想知道这种情况是否可能发生。
问题是我是否需要为每个写入操作单独使用缓冲区,或者在第3点将缓冲区复制到某种内部缓冲区中,我可以安全地在同一缓冲区中填充新响应?
答案 0 :(得分:1)
boost :: asio能够进行全双工操作,但你应该仔细管理缓冲区。
一般规则是:
因此,您可以同时进行1次写入和1次读取操作。
您描述的情况应该在单线程环境中工作,因为进程无法添加到缓冲区并使用它来同时写入。但是,有一个技巧:在你追加写入缓冲区后,你无法知道当前的async_write是否完成。你需要启动新的async_write吗?这一刻需要仔细核实。
P.S。不,asio从不在内部复制缓冲区。