Клиент-серверные программами на C под Linux

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

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

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

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

Запускаем слушающий сервер, он создает очередь обслуживания и пул обслуживающих серверов. Есть клиент, он посылает заявку серверу, сервер ставит заявку в очередь запросов. В это время любой свободный сервер забирает заявку, решает ее, ставит в очередь ответов, слушающий сервер забирает ее оттуда и передает ее клиенту. Либо обслуживающий сервер сам может передать заявку клиенту обратно (для этого в очереди запросов должен быть идентификатор клиента). Реализовать для TCP или UDP.
Отзывы
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Заказчик
Хочу выразить огромную благодарность Егору Замотаеву за помощь со сложными заданиями по системному программированию под Linux! Исполнитель с большим опытом, все договоренности выполняет в срок, на связи, готов все детально объяснить и посоветовать дополнительные материалы по теме. Большое спасибо, Егор, очень выручили, рада сотрудничать с вами и дальше.
1 год назад
R50 8775b53e2f27ff89e05d9d5e4db8b1ff
Фрилансер
Очень понравилось работать с Елизаветой!
1 год назад