boost asio для сервера синхронизации, поддерживающего TCP-сеанс открытым (с буферами google proto)

В настоящее время у меня есть очень простой сервер boost :: asio, который отправляет обновление статуса при подключении (с использованием буферов Google Pro):

try
{
  boost::asio::io_service io_service;
  tcp::acceptor acceptor(io_service,tcp::endpoint(tcp::v4(), 13));
  for (;;)
  {
    tcp::socket socket(io_service);
    acceptor.accept(socket);
    ...
    std::stringstream message;
    protoMsg.SerializeToOstream(&message);
    boost::system::error_code ignored_error;
    boost::asio::write(socket, boost::asio::buffer(message.str()), ignored_error);
  }
}
catch (std::exception& e) { }

Я хотел бы расширить его до первого чтения после принимая новое соединение, проверяйте, какой запрос был получен, и отправляйте разные сообщения обратно в зависимости от этого сообщения. Я также хотел бы оставить TCP-соединение открытым, чтобы клиенту не приходилось повторно подключаться, и он хотел бы обрабатывать несколько клиентов (немного, может быть 2 или 3).

Я просмотрел несколько примеров на boost asio, а именно tcp-сервер асинхронного времени и чат-сервер , но оба немного выше моей головы. Я даже не понимаю, нужен ли мне асинхронный сервер. Думаю, я мог бы просто выполнить чтение после acceptor.accept (socket) , но, думаю, тогда я бы не стал не продолжаю прислушиваться к дальнейшим запросам. И если я войду в цикл, я думаю, это будет означать, что я смогу обрабатывать только одного клиента. Так что, я думаю, это означает, что мне нужно перейти в асинхронный режим? Например, может быть, это не 250 строк кода? Или мне просто нужно разобраться в этих примерах? Спасибо

6
задан Cookie 12 August 2011 в 10:51
поделиться