我正在使用一个服务器系统,该系统要求服务器生成进一步的请求并获取响应,最后将响应返回到原始会话。
逻辑看起来像这样。
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中直接混合异步和同步调用以进行不同的会话?还是安全?
谢谢!