Типа, один клиент что-то посылает, и сообщение отсылается всем клиентам
Типа, на сервере есть массив клиентов и два треда.
В первом принимаются новые соединения и добавляются в массив.
Во втором в бесконечном цикле идет проход по всем клиентам и каждый слушается на предмет прибытия новых данных.
Типа
for(auto& client: clients) {
size_t messageLength = client.socket->read_some(buffer(client.buffer));
}
Но операция чтения блокирует поток! Т.е. я иду по всем клиентам, слушаю до конца времен первого, в то время как мне вещает второй, но я не могу его услышать.
Как вообще без асинхронности этот вопрос решать?
Но это блокирующая функция,
ну или выделять новый поток на соединение, что тоже нехорошо
неблокирующий синхронный никак, неблокирующий асинхронный пожалуйста
Libevent
Обычно тебе дают асинхронное апи для сокетов
Можно использовать select() и читать по частям сообщения клиентов
Ищи про реализацию событий, ИМХО
Обсуждают сегодня