Задание по очередям сообщений 1.1
Нужно написать чат с общей комнатой. Клиент и сервер. Сервер создает очередь, в которую записываются все сообщения от всех пользователей. Когда клиент присоединяется, он уведомляет сервер о том, что он новый клиент, может указать свое имя. Это имя рассылается всем остальным клиентам, которые подключены к этому серверу (читают из одной очереди, которая обслуживает сервер). Нужно создать служебное сообщение, в котором хранится список всех подключенных клиентов, и, как только новый клиент подключился, очередь расставили, соответственно, другие клиенты забрали эти сообщения и обновили у себя список подключенных пользователей, и теперь они видят еще одного пользователя. Когда кто-то пишет сообщение, оно располагается в очередь, сервер читает его и рассылает его всем клиентам, которые в данный момент подключены к данному чату. Рассылает - означает нужно столько раз продублировать это сообщение с нужными приоритетами, чтобы клиенты могли его забрать каждый свое. Можно использовать многопоточность. Чат одновременно читает сообщения и ожидает ввода пользователя. Как увязать блокирующие функции: создаем два потока - один всегда ждем сообщения от сервера, крутится в цикле и их обрабатывает и обновляет список сообщений и список пользователей, второй всегда ждет ввода с клавиатуры и, как только получает, отправляет на сервер.
Задание по общей памяти и семафорам 1.2
Такой же чат нужно выполнить с использованием общей памяти и семафоров.
2.1 Многопроцессный клиент-сервер
При запуске случающий (главный) сервер порождает пул заранее готовых процессов/потоков с обслуживающими серверами. Слушающий сервер следит за пулом обслуживающих серверов и при подключении клиента идентификатор свободного сервера возвращает клиенту, клиент подключается к нему. При количестве клиентов больше количества обслуживающих серверов создается новая порция обслуживающих серверов. Если количество клиентов уменьшается, лишние процессы уничтожаются. Для уведомления слушающего сервера можно использовать массив (только для потоков - слушающий сервер будет искать в массиве 0 и перераспределять на него нагрузку), канал, очереди сообщений, сигналы. Реализовать для TCP или UDP.
2.2 Клиент-сервер на основе модели Производитель-потребитель.
Запускаем слушающий сервер, он создает очередь обслуживания и пул обслуживающих серверов. Есть клиент, он посылает заявку серверу, сервер ставит заявку в очередь запросов. В это время любой свободный сервер забирает заявку, решает ее, ставит в очередь ответов, слушающий сервер забирает ее оттуда и передает ее клиенту. Либо обслуживающий сервер сам может передать заявку клиенту обратно (для этого в очереди запросов должен быть идентификатор клиента). Реализовать для TCP или UDP.
Гарантия на работу | 1 год |
Средний балл | 4.96 |
Стоимость | Назначаете сами |
Эксперт | Выбираете сами |
Уникальность работы | от 70% |