Boost.asio, возможно ли управлять другим сеансом из одного сеанса с помощью вызовов синхронизации? - PullRequest
0 голосов
/ 05 сентября 2018

Я работаю на серверной системе, которая требует, чтобы сервер генерировал дополнительный запрос, получал ответ и, наконец, возвращал ответ на исходный сеанс.

Логика выглядит так.

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 синхронизированных вызова не работали должным образом, отправка и получение данных не синхронизировались с клиентом, который является другой стороной another_session.

Возможно ли, что мы можем напрямую смешивать асинхронные и синхронизирующие вызовы для разных сессий в boost.asio? Или это безопасно?

Спасибо!

...