Клиент-серверные приложения Си под Linux

Цена договорная
16 мая 2023, 06:30 • 3 отклика • 39 просмотров
Задание по очередям сообщений 1.1
Нужно написать чат с общей комнатой. Клиент и сервер. Сервер создает очередь, в которую записываются все сообщения от всех пользователей. Когда клиент присоединяется, он уведомляет сервер о том, что он новый клиент, может указать свое имя. Это имя рассылается всем остальным клиентам, которые подключены к этому серверу (читают из одной очереди, которая обслуживает сервер). Нужно создать служебное сообщение, в котором хранится список всех подключенных клиентов, и, как только новый клиент подключился, очередь расставили, соответственно, другие клиенты забрали эти сообщения и обновили у себя список подключенных пользователей, и теперь они видят еще одного пользователя. Когда кто-то пишет сообщение, оно располагается в очередь, сервер читает его и рассылает его всем клиентам, которые в данный момент подключены к данному чату. Рассылает - означает нужно столько раз продублировать это сообщение с нужными приоритетами, чтобы клиенты могли его забрать каждый свое. Можно использовать многопоточность. Чат одновременно читает сообщения и ожидает ввода пользователя. Как увязать блокирующие функции: создаем два потока - один всегда ждем сообщения от сервера, крутится в цикле и их обрабатывает и обновляет список сообщений и список пользователей, второй всегда ждет ввода с клавиатуры и, как только получает, отправляет на сервер.

Задание по общей памяти и семафорам 1.2
Такой же чат нужно выполнить с использованием общей памяти и семафоров.

2.1 Многопроцессный клиент-сервер. Есть пример реализации.
При запуске случающий (главный) сервер порождает пул заранее готовых процессов/потоков с обслуживающими серверами. Слушающий сервер следит за пулом обслуживающих серверов и при подключении клиента идентификатор свободного сервера возвращает клиенту, клиент подключается к нему. При количестве клиентов больше количества обслуживающих серверов создается новая порция обслуживающих серверов. Если количество клиентов уменьшается, лишние процессы уничтожаются. Для уведомления слушающего сервера можно использовать массив (только для потоков - слушающий сервер будет искать в массиве 0 и перераспределять на него нагрузку), канал, очереди сообщений, сигналы. Реализовать для TCP или UDP.

2.2 Клиент-сервер на основе модели Производитель-потребитель.

Запускаем слушающий сервер, он создает очередь обслуживания и пул обслуживающих серверов. Есть клиент, он посылает заявку серверу, сервер ставит заявку в очередь запросов. В это время любой свободный сервер забирает заявку, решает ее, ставит в очередь ответов, слушающий сервер забирает ее оттуда и передает ее клиенту. Либо обслуживающий сервер сам может передать заявку клиенту обратно (для этого в очереди запросов должен быть идентификатор клиента). Реализовать для TCP или UDP.

Просьба оценить по стоимости и срокам и адекватно оценивать сложность работ.
Отзывы
R50 8775b53e2f27ff89e05d9d5e4db8b1ff
Фрилансер
Хорошая, адекватная заказчица, приятный и отзывчивый человек!
11 месяцев назад