В настоящее время у меня есть очень простой сервер 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 строк кода? Или мне просто нужно разобраться в этих примерах? Спасибо