C ++: Boost.Asio: SSL-Serversitzung in einem neuen Thread starten

Ich habe ein Paar Server / Client-Programme geschrieben, die auf @ basieredieses Beispiel für den Server und ich bin fertig mit allen Kommunikationsprotokollen. Der Server soll mehrere Verbindungen von mehreren Verbindungen von mehreren Clients erhalten, daher möchte ich die Sitzungen voneinander trennen, und ich hoffe, dass ich das mit @ tun kanstd::thread.

Das scheint einfach zu sein, aber ich weiß überhaupt nicht, wie ich es machen soll. Alle Online-Beispiele scheinen zu zeigen, wie eine Funktion parallel ausgeführt wird, aber es scheint nicht zu zeigen, wie ein Objekt in einem neuen Thread erstellt wird.

Ich habe einige Anmerkungen gemacht, um mein Verständnis für diesen Sitzungsmechanismus zu erläutern.

Der Code, den ich verwenden möchte, ist der folgende:

class server
{
public:
  server(boost::asio::io_service& io_service, unsigned short port)
    : io_service_(io_service),
      acceptor_(io_service,
          boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)),
      context_(io_service, boost::asio::ssl::context::sslv23)
  {
    //some code...


    //notice the next lines here create the session object, and then recurs that to receive more connections
    session* new_session = new session(io_service_, context_);

    //this is called to accept more connections if available, the callback function is called with start() to start the session
    acceptor_.async_accept(new_session->socket(),
        boost::bind(&server::handle_accept, this, new_session,
          boost::asio::placeholders::error));
  }

  void handle_accept(session* new_session, const boost::system::error_code& error)
  {
    if (!error)
    {
 ,     //so the session starts here, and another object is created waiting for another session
      new_session->start();
      new_session = new session(io_service_, context_);
      //now this function is, again, a call back function to make use of new_session, the new object that's waiting for a connection
      acceptor_.async_accept(new_session->socket(),
          boost::bind(&server::handle_accept, this, new_session,
            boost::asio::placeholders::error));
    }
    else
    {
      delete new_session;
    }
  }

private:
  boost::asio::io_service& io_service_;
  boost::asio::ip::tcp::acceptor acceptor_;
  boost::asio::ssl::context context_;
};

Wie kann ich diese Sitzungen in new @ erstellestd::thread?

Wenn Sie zusätzliche Informationen benötigen, fragen Sie bitte. Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage