Вам необходимо разработать простой веб-сервер, который будет возвращать содержимое локальных файлов по их имени. В этом задании сервер умеет обрабатывать только один запрос и работает в однопоточном режиме. Язык программирования вы можете выбрать любой. Требования:
- веб-сервер создает сокет соединения при контакте с клиентом (браузером) получает HTTP-запрос из этого соединения
- анализирует запрос, чтобы определить конкретный запрашиваемый файл
- находит запрошенный файл в своей локальной файловой системе
- создает ответное HTTP-сообщение, состоящее из содержимого запрошенного файла и предшествующих ему строк заголовков
- отправляет ответ через TCP-соединение обратно клиенту
- если браузер запрашивает файл, которого нет на веб-сервере, то сервер должен вернуть сообщение об ошибке «404 Not Found»
Ваша задача – разработать и запустить свой локальный веб-сервер, а затем проверить его работу при помощи отправки запросов через браузер. Продемонстрируйте работу сервера, приложив скрины.
Скорее всего порт 80 у вас уже занят, поэтому вам необходимо использовать другой порт для работы вашей программы.
Формат команды для запуска сервера:
<server.exe> server_port
todo
Реализуйте многопоточный сервер, который мог бы обслуживать несколько запросов одновременно. Сначала создайте основной поток (процесс), в котором ваш модифицированный сервер ожидает клиентов на определенном фиксированном порту. При получении запроса на TCP-соединение от клиента он будет устанавливать это соединение через другой порт и обслуживать запрос клиента в отдельном потоке. Таким образом, для каждой пары запрос-ответ будет создаваться отдельное TCP-соединение в отдельном потоке.
Вместо использования браузера напишите собственный HTTP-клиент для тестирования вашего веб-сервера. Ваш клиент будет поддерживать работу с командной строкой, подключаться к серверу с помощью TCP-соединения, отправлять ему HTTP-запрос с помощью метода GET и отображать ответ сервера в качестве результата. Клиент должен будет в качестве входных параметров принимать аргументы командной строки, определяющие IP-адрес или имя сервера, порт сервера и имя файла на сервере. Продемонстрируйте работу клиента, приложив скрины.
Формат команды для запуска клиента:
<client.exe> server_host server_port filename
todo
Пусть ресурсы вашего сервера ограничены и вы хотите контролировать максимальное количество
потоков, с которыми может работать ваш многопоточный сервер одновременно. При запуске
сервер получает целочисленное значение concurrency_level
из командной строки. Если сервер
получает запрос от клиента, и при этом уже запущено максимальное количество потоков, то
запрос от клиента блокируется (встает в очередь) и дожидается, пока не закончит работу
один из запущенных потоков. После этого сервер может запустить новый поток для обработки
запроса от клиента.
Формат команды для запуска сервера:
<server.exe> server_port concurrency_level
Голосовые сообщения отправляются от хоста А к хосту Б в сети с коммутацией пакетов в режиме
реального времени. Хост А преобразует на лету аналоговый голосовой сигнал в цифровой поток
битов, имеющий скорость
todo
Рассмотрим буфер маршрутизатора, где пакеты хранятся перед передачей их в исходящую линию
связи. В этой задаче вы будете использовать широко известную из теории массового
обслуживания (или теории очередей) формулу Литтла. Пусть
todo
Рассмотрим рисунок.
Предположим, нам известно, что на маршруте от сервера до клиента узким местом
является первая линия связи, скорость передачи данных по которой равна
- Какова временная разница прибытия пакетов к месту назначения? То есть, сколько времени пройдет от момента получения клиентом последнего бита первого пакета до момента получения последнего бита второго пакета?
- Теперь предположим, что узким местом является вторая линия связи (то есть
$R_C < R_S$ ). Может ли второй пакет находиться во входном буфере, ожидая передачи во вторую линию? Почему? Если предположить, что сервер отправляет второй пакет, спустя$T$ секунд после отправки первого, то каково должно быть минимальное значение$T$ , чтобы очередь во вторую линию связи была нулевая? Обоснуйте ответ.
todo
На рисунке показана сеть организации, подключенная к Интернету:
Предположим, что средний размер объекта равен
- Найдите
$\Delta$ (это среднее время, необходимое для отправки объекта по каналу связи). - Найдите общее среднее время ответа.
- Предположим, что в локальной сети организации присутствует кэширующий
сервер. Пусть коэффициент непопадания в кэш равен
$0.4$ . Найдите общее время ответа.
todo