ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 05.04.2023

Просмотров: 237

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Рисунок 1. Опрос (polling)

К очевидным недостаткам такого подхода следует отнести следующие:

  • очень много лишних запросов, посылаемых клиентом, когда на сервере еще нет новых данных;
  • серверу приходится хранить информацию о произошедших событиях до тех пор, пока клиент не запросит их или пока они не устареют;
  • события всегда приходят с опозданием, ввиду заданного интервала и времени, требуемого на открытие соединения.

Преимуществом опроса является простота его реализации и поддержка большинством из используемых сегодня веб-браузеров.

К таким техникам относится другой способ обмена сообщениями, называемый длительный опросом (англ. long polling). После загрузки веб-страницы, клиентский код выполняет запрос, но сервер не отвечает и не закрывает соединение, пока не появятся новые данные или пока клиент не отключится самостоятельно. Как только данные появились – отправляется ответ и соединение закрывается. После чего клиент сразу же отправляет следующий запрос, снова запуская процесс ожидания (рисунок 2).

Рисунок 2. Длинный опрос (long-polling)

Достоинства этого метода по сравнению с классическим опросом (polling):

  • минимальное количество запросов;
  • высокая временная точность событий;
  • отсутствие необходимости длительного хранения событий сервером.

После создания объекта EventSource с указанием адреса подключения браузер отправит запрос на установление соединения серверу. Чтобы соединение успешно открылось, сервер должен ответить с HTTP-заголовком "Content-Type: text/event-stream" и не закрывать соединение. После этого сервер может отправлять в открытое соединение сообщения, когда появляется новая информация (рисунок 3).

Рисунок 3. Server-Sent Events

В Server-Sent Events включена возможность отправлять идентификатор сообщения, который помогает восстановить утраченные события в случае обрыва соединения. В поддерживающих стандарт браузерах доступен удобный событийно-ориентированный программный интерфейс (API) для обработки получаемых сообщений и ошибок.

После того как установлено соединение по протоколу WebSocket, сервер и клиент могут посылать друг другу сообщения, когда новая информация доступна на одной из сторон (рисунок 4). Таким образом, обеспечивается своевременная передача необходимой информации и поддержание ее в актуальном состоянии.


Рисунок 4. WebSocket

Протокол WebSocket подробно описан в RFC 6455 [3]. Здесь лишь отметим, что формат пакета (фрейма) данных имеет компактную структуру, обеспечивая минимум накладных расходов на передачу и повышая тем самым производительность. Кроме того, фреймы делятся на два больших типа: фреймы с данными и управляющие фреймы, предназначенные для проверки связи (ping) и закрытия соединения. Помимо передачи текстовой информации, фреймы с данными могут содержать и бинарные данные.

ГЛАВА 2. ОСНОВНЫЕ ПРИНЦИПЫ ПОСТРОЕНИЯ РАСПРЕДЕЛЁННЫХ ИНФОРМАЦИОННЫХ СИСТЕМ

2.1 Основные принципы структурного подхода

В основу функционально-модульного подхода положен принцип алгоритмической декомпозиции, в соответствии с которым производится разделение функций ИС на модули по функциональной принадлежности, когда каждый модуль системы реализует один из этапов общего процесса. Традиционный функционально-модульный подход к разработке ИС предусматривает строго последовательный порядок действий (так называемая «модель водопада»).

По мнению Страуструпа, главный недостаток модели «водопада» заключается в склонности информации течь только в одну сторону. Если проблема оказывается «внизу по течению», то часто возникает сильный организационный и методический нажим с целью проводить лишь ограниченные исправления и разрешить проблему без воздействия на предыдущие стадии проекта.

Такая недостаточная обратная связь приводит к проектированию, ущербному во многих отношениях, а ограниченные исправления ведут к деформированным реализациям. Изменение требований к системе может привести к ее полному перепроектированию, поэтому ошибки, заложенные на ранних этапах, сильно сказываются на времени и конечной цене разработки.

Ориентация на такую последовательную модель увеличивает вероятность того, что будет утрачен контроль над решением возникающих проблем.


2.2 Создание клиент-серверного приложения, способное передавать данные по сети

Цель данной работы создать клиент серверное приложение способное передавать данные по сети соответственно приложение будет состоять из двух частей.

  1. Сервер который будет принимать запросы от клиента.
  2. Клиент который будет передавать на сервер данные серверу и получать от него информацию.

Для создания приложения понадобиться Microsoft Visual Studio 2005.

Пишем сервер

Создаем новый проект

Выбираем создание консольного приложения

В итоге получаем пустое приложение

Проект состоит из двух частей из подключенных библиотек, таких как

using System;

using System.Collections.Generic;

using System.Text;

чтобы подключить нужную библиотеку необходимо найти ее в object browser

например библиотеку для работы с сетью.

Находим ее в object browser

Выделяем название библиотеки System.Net чтобы объявить ее необходимо перейти в объявления модулей и сказать программе что мы будем его использовать объявлением

Using System.Net; так как пишем на C# главное не забыть в конце строки ставить “;”

данный метод программирования довольно просто так как Microsoft Visual Studio 2005 предлагает сама на выбор методы и функции которыми обладают библиотеки.

Для работы приложения необходимо подключить следующие библиотеки:

  • System.Net библиотека работы с сетью
  • System.Net.Sockets библиотека работы с сокетами на уровне портов
  • System.Net.NetworkInformation библиотека работы с информацией, которую можно получить от сетевых устройств

Когда подключены все библиотеки можно писать программу

Существуют два типа переменных

  1. обычные переменные объявляют как обычно во всех языках программирования например

string имя переменной; объявление текстовых переменных p=”текст”;

int имя переменной; объявление цифровых переменных p=65535

  1. объектные переменные необходимо создавать командой new например создания сервера ожидающего запросов от клиента на заданный порт

TcpListener имя переменной сервера = new TcpListener(IP адрес ПК ,номер порта от 1000 до 65534);

Например:

PAddress demo4 = IPAddress.Parse("0.0.0.0");//используем все IP адреса компьютера для прослушивания

TcpListener demo=new TcpListener(demo4,3000);//прослушиваем порт 6000


После создания сервера, его необходимо запустить, чтобы он прослушивал запросы от клиента

Для запуска и остановки используют 2 функции обьекта такие как

имя переменной сервера.Start() запускает сервер и он начинает ждать запросы на тот порт который назначен от клиента.

имя переменной сервера.Stop() останавливает прослушивание и работу сервера

Далее необходимо дождаться запроса от клиента и ответив ему попытаться получить какую ни будь информацию.

Далее строка ждет соединения с сервером и когда оно произошло присваивает переменной сессию данного соединения

TcpClient имя переменной сессии = имя переменной сервера .AcceptTcpClient(); если присвоилось то коннект есть и приложение продолжит дальше свою работу если не присвоилось то оно будет ожидать запроса от клиента.

Так как в сетевых устройствах все данные передаются в формате байт то полученную информацию от клиента необходимо будет преобразовать из байт например в текст.

Но для получения ответа необходимо объявить массив байт например длинной 256 символов чтобы с запасом на будущее было

byte[] имя переменной в байтах = new byte[256];

Преобразование выполняется следующим образом

Объявляем текстовую переменную и присваиваем ей значение полученное от клиента

Объявленная переменная для ответа = System.Text.Encoding.ASCII.GetString(имя переменной в байтах);

Чтобы получать от клиента не одно а несколько значений необходимо создать непрерывный цикл например:

While(true)

{

действия

}

Данный цикл никогда не завершиться поэтому он будет постоянно считывать значения от клиента и выводит их на экран сервера командой Console.Write(Объявленная переменная для ответа );

Для того чтобы считать данные переданные клиентом необходимо вызвать метод Receive(байтовый массив) в байтовый массив будет записано значение переданное от клиента в байтах мы его преобразуем в строку и выведем на экран

В итоге мы получаем шаблонное приложение которое получает данные от клиента в бесконечном цикле преобразует их в текстовые строки и выводит на экран сервера у клиента же на экране не будит ничего отображаться так как мы ему ничего не отсылали для того чтобы отослать клиенту данные необходимо воспользоваться методом Send(байтовый массив) отправить например полученные байты чтобы они отобразились в окне, клиента.


Если же нужно послать другое значение то для преобразования значения в байты необходимо воспользоваться командой

System.Text.Encoding.ASCII.GetBytes(значение) Даная команда преобразует значение в байтовую форму.

При запуске сервера появиться простое окно консоли

Для подключения к приложению можно воспользоваться в строенным средством windows называющимся telnet

Чтобы подключиться к приложению наберите в командной строке telnet localhost номер порта который написали в созданном сервере.

Например

В появившемся окне введите любой текст и посмотрите результат

так как сервер взаимодействует с клиентом и не может закрыться по его команде его пока это не предусмотрено в приложении во избежание ошибок сервер нужно закрывать первы.

ЗАКЛЮЧЕНИЕ

Несомненное преимущество состоит в приближенности данных к вычислительным процессам. Большая часть расчетов выполняется на стороне сервера, благодаря чему быстродействие значительно увеличивается.

Технология клиент-сервер дает большую безопасность для пользователя, процессы выполняются более стабильно, согласованно, с повышенной конфиденциальностью, данные быстро обрабатываются и надежно хранятся. Развитие системы с архитектурой клиент-сервер обязано также тому, что при подключении к недорогим серверам таких же недорогих ПК получается оптимальное соотношение стоимости и производительности.

Как правило, программа обработки данных (клиентская часть) располагается на одном ПК, а сама БД - на другом. Такое разделение вполне закономерно: клиентская часть программы (та, что находится у пользователя), передает по сети запрос на обработку данных на другой компьютер, на котором сервер базы данных их читает, выполняет, и возвращает по сети ответ клиенту. Причем по сети передается лишь полезная информация.

С другой стороны постоянно совершенствуется сам метод хранения и обработки данных, и если его реализация (то есть сервер баз данных) изменилась, то не нужно будет делать новую компиляцию с новыми библиотеками всех разработанных программ, а потребуется всего лишь произвести установку нового сервера БД и перевести базы данных в новый формат сервера.

Используя различные компьютеры, разработчики клиент-серверных систем эмулируют вычислительную мощность больших ЭВМ, распределяют прикладные задачи по разным компьютерам и серверам. Каждый из этих компьютеров берет на себя определенную вычислительную нагрузку, использует информацию совместно с другими процессорами в сети.