LINUX.ORG.RU

Сообщения zeroday

 

архитектура асинхронного сервера на boost

Ребят, помогите, необходимо сделать типа чат, примерно как из примера http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/example/chat/chat_se... но со своими особенностями.

1) сообщения бинарные
2) могут быть большой длинны (например не строка, а 5мб)

Протокол типа:
Подключился клиент0, указал свой тип.
Подключился клиент1, указал свой тип и тд.
Если клиент передал сообщение без типа - сообщение получили все подключенные клиенты.
Если клиент передал сообщение с типом, его получили только пользователи с типом.

Тип - битовая маска, то есть можно составные типы.

Никак не могу решить как сделать правильно.

Меня смущает что

write_msgs_.push_back(msg);
сообщения сохраняются в векторе, не может ли произойти такое что затормозится отправка и вектор накопит кучу сообщений? Хотелось бы не выделять память под сообщение для каждого клиента.

Ещё я не очень понимаю в каком месте происходит освобождение памяти вот этой

chat_session_ptr new_session(new chat_session(io_service_, room_));

Ещё я не уверен будет ли всё это работать если io_service.run(); вызвать в 10 потоков? Не будет проблем? Типа много коннектов/много потоков

Правильно ли делать столько классов? Правильно ли весь код писать в одном main файле?

Ещё не понимаю вот что, почему чтение заголовка и тела разделяют на функции? можно же всё сделать в одной а в зависимости от флага выполнять действие?

Не могу найти ответы на свои вопросы. Кто разбирается в подобном, помогите определиться. А то что-то я загнался)

 , , ,

zeroday
()

RSS подписка на новые темы