Boost.asio,是否可以通过同步调用从一个会话控制另一个会话?

时间:2018-09-05 00:14:12

标签: c++ boost boost-asio asio

我正在使用一个服务器系统,该系统要求服务器生成进一步的请求并获取响应,最后将响应返回到原始会话。

逻辑看起来像这样。

class Session : public boost::enable_shared_from_this<Session>
{
    virtual void onHandleRequest(const boost::system::error_code &ec, size_t bytes_transferred)
    {
        if (!ec && bytes_transferred)
        {
            // Find both seesions.
            //
            boost::shared_ptr<Session> self_session(shared_from_this());
            boost::shared_ptr<Session> another_session = find_by_id();

            // Send some request to another session and get a response.
            //
            another_session->socket.send(header);
            another_session->socket.send(request);

            header = another_session->socket.read_some();
            response = another_session->socket.read_some();

            // Parse the response from another session and send to self session.
            //
            boost::asio::async_write(self_session->socket,
                response
                shared_from_this(),
                boost::bind(&Session:bind(&Session::HandleReadHeader)))
        }
    }
}

问题在于,似乎这4个同步调用不能很好地工作,数据发送和接收与客户端的同步也不是另一会话的另一端。

是否可以在boost.asio中直接混合异步和同步调用以进行不同的会话?还是安全?

谢谢!

0 个答案:

没有答案