Я работаю на серверной системе, которая требует, чтобы сервер генерировал дополнительный запрос, получал ответ и, наконец, возвращал ответ на исходный сеанс.
Логика выглядит так.
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? Или это безопасно?
Спасибо!