Пояснительная записка (1231620), страница 4
Текст из файла (страница 4)
Разделение во времени в полудуплексном режиме вызвано тем, что передающий узел в конкретный момент времени полностью занимает канал передачи. Во время передачи данных возникает явление, когда несколько передающих узлов пытаются в один и тот же момент времени осуществлять передачу. Такое явление получило название коллизия.
Полнодуплексный (дуплексный) режим – режим, при котором передача данных может производиться одновременно с приёмом данных.
Дуплексная связь обычно осуществляется с использованием нескольких каналов связи: первый канал – исходящая связь для первого устройства и входящая для второго, второй канал – исходящая для второго устройства и входящая для первого.
Суммарная скорость обмена информацией по каналу связи в данном режиме может достигать своего максимума. Например, если используется технология Fast Ethernet [20] со скоростью 100 Мбит/с, то скорость может быть близка к 200 Мбит/с (100 Мбит/с – передача и 100 Мбит/с – приём).
В ряде случаев возможна дуплексная связь с использованием одного канала связи. В этом случае устройство при приёме данных вычитает из сигнала свой отправленный сигнал, а получаемая разница является сигналом отправителя.
В результате, можно сделать вывод о том, что, не смотря на существование многообразия приложений, осуществляющих онлайн консультирование, такие системы не удовлетворяют требованиям сети по экономии интернет трафика сети и загруженности каналов передачи, а также требования по уменьшению нагрузки на серверы сайтов.
Для удовлетворения требований сети необходимо выбрать наиболее оптимальный протокол передачи данных. Обоснование выбора описано в главе 3.
3 Средства по решению поставленной задачи
Для перехода к собственной реализации системы онлайн-консультанта, необходимо:
– выбрать язык программирования;
– выбрать среду разработки;
– выбрать способ передачи информации между сервером и клиентским модулем;
– выбрать способ обмена данными между серверным модулем и web-виджетом;
– выбрать систему управления базами данных, для хранения информации серверным приложением.
3.1 Выбор языка программирования
Первая и основная задача, стоящая перед тем, как начинать разрабатывать сервер для предприятия – выбрать язык, на котором будет разрабатываться приложение сервера.
В настоящее время достаточно большое количество языков высокого уровня, для написания такого типа программ. Это С, C++, C#, Ada, Groovy, Ruby и многие другие [21-23]. Для того чтобы выбрать подходящий язык программирования необходимо, чтобы он удовлетворял ряду требований:
– объектная ориентированность языка;
– переносимость приложений с одной платформы на другую (кроссплатформенность);
– большой комплект готовых библиотек;
– возможность работы на низком уровне с памятью, адресами и портами;
– многопоточность и многозадачность.
Исходя из вышеперечисленных требований для разработки приложения «онлайн-консультант» выбран язык Java [24]. Он имеет следующие достоинства:
– переносимость. Программы, написанные на языке Java, после однократной трансляции в байт-код могут быть исполнены на любой платформе, для которой реализована виртуальная Java-машина;
– безопасность. Функционирование программы полностью определяется (и ограничивается) виртуальной Java-машиной. Отсутствуют указатели и другие механизмы для непосредственной работы с физической памятью и прочим аппаратным обеспечением компьютера;
– надежность. В языке Java отсутствуют механизмы, потенциально приводящие к ошибкам: арифметика указателей, неявное преобразование типов с потерей точности и т.п. Присутствует строгий контроль типов, обязательный контроль исключительных ситуаций. Многие логические ошибки обнаруживаются на этапе компиляции;
– сборщик мусора. Освобождение памяти при работе программы осуществляется автоматически с помощью «сборщика мусора», поэтому программировать с использованием динамически распределяемой памяти проще и надежнее;
– стандартные библиотеки. Многие задачи, встречающиеся при разработке программного обеспечения, уже решены в рамках стандартных библиотек. Использование объектно-ориентированного подхода позволяет легко использовать готовые объекты в своих программах. Для запуска приложения необходима установка JRE, содержащего полный набор библиотек, даже если все они не используются в приложении;
– самодокументируемый код. Имеется механизм автоматического генерирования документации на основе комментариев, размещенных в тексте программ;
– многообразие типов приложений. На языке Java возможно реализовать абсолютно разные по способу функционированию и сфере использования программы;
– объектная ориентированность. Java является сравнительно простым объектно-ориентированным языком программирования, который позволяет сравнительно удобно использовать все принципы ООП.
Java – объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle), официально выпущен 23 мая 1995 года.
Изначально язык назывался Oak («Дуб») разрабатывался Джеймсом Гослингом для программирования бытовых электронных устройств. Впоследствии он был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения.
Язык назван в честь марки кофе Java, которая, в свою очередь, получила наименование одноимённого острова (Ява), поэтому на официальной эмблеме языка изображена чашка с горячим кофе.
Существует несколько основных семейств технологий Java:
– Java SE (Java Standard Edition), основное издание Java, содержит компиляторы, API, Java Runtime Environment; подходит для создания пользовательских приложений, в первую очередь – для настольных систем;
– Java EE (Java Enterprise Edition) представляет собой набор спецификаций для создания программного обеспечения уровня предприятия;
– Java ME (Java Micro Edition) создана для использования в устройствах, ограниченных по вычислительной мощности, например, в мобильных телефонах, КПК, встроенных системах;
– JavaFX – технология, являющаяся следующим шагом в эволюции Java как Rich Client Platform; предназначена для создания графических интерфейсов корпоративных приложений и бизнеса.
– Java Card – технология предоставляет безопасную среду для приложений, работающих на смарт-картах и других устройствах с очень ограниченным объёмом памяти и возможностями обработки [25-26].
3.2 Выбор среды разработки
После выбора языка программирования возникает следующая задача – выбрать среду разработки, в которой будет разрабатываться приложение сервера.
Среди большого числа сред можно выделить следующие: Java Studio, JBuilder [27], NetBeans, Visual J++, IntelliJ IDEA и многие другие. Эти среды разработки очень хороши для написания программ, имеют привлекательные интерфейс, удобны в использовании, а также снабжены рядом полезных функций. Но для написания приложения будет использовано программное обеспечение Eclipse.
Есть ряд преимуществ:
– Eclipse предоставляет согласованный набор функций на большинстве платформ, т.е. независимо от того, какая платформа используется, Eclipse выступает как приложение, созданное для этой платформы. При загрузке дистрибутива Eclipse загружается версию для выбранной пользователем платформы. Eclipse обладает отдельными визуальными инструментариями для каждой из платформ. Это позволяет ему выглядеть естественно и улучшает производительность;
– Eclipse несколько языков программирования. Философия Eclipse сформирована в архитектуру технологии: она обеспечивает небольшое ядро, дающее разработчикам согласованный способ расширения системных возможностей. Каждое расширение или плагин способствует отдельной функциональности в конфигурации Eclipse и может обеспечить точки расширения, которые могут использовать другие плагины. Архитектура плагинов позволяет Eclipse поддерживать множество языков и парадигм;
– Eclipse предоставляет открытый исходный код и представляет собой бесплатный продукт, к тому же с полной поддержкой разработчиками;
– среды полностью расширяемая и настраиваемая, т.е. ее архитектура позволяет добавить множество плагинов, а также их настроить по желанию пользователя. Интерфейс приложения можно полностью изменить исходя из предпочтений разработчика;
– полностью подходит для работы на предприятиях. Корпорация IBM разрабатывала Eclipse как патентованную платформу, однако в 2004-м году IBM помогла сформировать некоммерческий фонд Eclipse для осуществления надзора за дальнейшей разработкой технологии. Теперь совет директоров Eclipse одобряет новые подпроекты, а фонд привлекает коммерческие организации, академические и исследовательские организации, группы стандартов и так далее для того, чтобы проект Eclipse всегда находился на переднем крае индустрии инструментов разработки.
3.3 Выбор способа передачи между серверным модулем и клиентским приложением
В качестве следующей задачи выступает выбор способа передачи данных между приложением сервера и приложением клиента, написанных на языке Java.
Язык Java делает сетевое программирование простым благодаря наличию специальных средств и классов. Существует некоторый ряд сетевых приложений. Internet-приложения включают Web-браузер, e-mail, сетевые новости, передачу файлов и telnet. Основные используемые протоколы – TCP и IP. Приложения клиент/сервер используют компьютер, выполняющий специальную программу – сервер, которая предоставляет услуги другим программам – клиентам. Клиент – это программа, получающая услуги от сервера. Клиент-серверные приложения основаны на использовании, в первую очередь, прикладных протоколов стека TCP/IP, таких как:
– HTTP – Hypertext Transfer Protocol [19] (WWW);
– NNTP – Network News Transfer Protocol [28] (группы новостей);
– SMTP – Simple Mail Transfer Protocol [29] (посылка почты);
– POP3 – Post Office Protocol [30] (чтение почты с сервера);
– FTP – File Transfer Protocol [31] (протокол передачи файлов);
– TELNET [32] – Удаленное управление компьютерами.
Для постоянного обмена между двумя приложениями ни один из вышеперечисленных протоколов не подходит, поэтому выбран протокол Socket.
Сокеты – это сетевые разъемы, через которые осуществляются двунаправленные поточные соединения между компьютерами. Сокет определяется номером порта и IP-адресом. При этом IP-адрес используется для идентификации компьютера, номер порта – для идентификации процесса, работающего на компьютере. Когда одно приложение знает сокет другого, создается сокетное соединение. Клиент пытается соединиться с сервером, инициализируя сокетное соединение. Сервер ждет, пока клиент не свяжется с ним. Первое сообщение, посылаемое клиентом на сервер, содержит сокет клиента. Сервер в свою очередь создает сокет, который будет использоваться для связи с клиентом, и посылает его клиенту с первым сообщением. После этого устанавливается коммуникационное соединение.
Соединение сокетов очень удобно тем, что связь двунаправленная и параллельная, что позволяет одновременно передавать информацию как от сервера клиенту, так и от клиента серверу.
3.4 Выбор способа общения между сервером и web-виджетом
Одной из важных задач является выбор средства передачи данных между Web-клиентом и сервером, которая минимизирует нагрузку на каналы передачи и избавит сервер от лишней обработки данных.
В предыдущем разделе рассмотрены существующие способы организации такой связи, а также их недостатки.
С приходом HTML 5 развитие получил новый протокол обмена информацией, который стал альтернативой стандартного HTTP/HTTPS. Данный протокол получил название WebSocket. Для решения поставленной задачи будем использовать именно его.
WebSocket – протокол полнодуплексной связи поверх TCP-соединения, предназначенный для обмена сообщениями между браузером и веб-сервером в режиме реального времени. Полное описание данного протокола находится в стандарте RFC 6455 [33].
Данный протокол исключает постоянный обмен заголовками как в стандарте HTTP, что существенно снижает нагрузку на сеть и уменьшает интернет трафик. Основное его преимущество – после установки соединения клиента с сервером связь не разрывается, а передача данных происходит в двух направлениях по независимым каналам. При этом, если нет информации для передачи, соединение остается открытым.
Данные особенности протокола позволяют без особых усилий и хитростей, разрабатывать различные независимые модули для сайтов, информация для которых может загружаться из совершенно других серверов.
Полнодуплексное соединение упрощает реализацию таких систем как чатов, онлайн игр, обмена медиаданными и тому подобное.
Процедура установки соединения называется «рукопожатием». При успешном соединении начинается полнодуплекный обмен дан-ными. Данные передаются строго в определенном формате согласно кадру (фрейму) стандарта RFC 6455.
В общем виде фрейм представлен на рисунке 12.
Рисунок 12 – Фрейм WebSoket
Обозначения флагов фрейма протокола WebSocket представлены в таблице 2.
Таблица 2 – Обозначение полей и флагов кадра WebSocket
Название | Размер | Значение |
FIN | 1 бит | Флаг фрагментации сообщения. У всех фреймов установлен в 0, кроме последнего (установлен в 1). Сообщение, состоящее из одного фрагмента, имеет флаг 1. |
RSV1 | 1 бит | В стандартном WebSocket равны 0. Предназначены для расширений протокола. Расширение |
RSV2 | 1 бит |
Продолжение таблицы 2
Название | Размер | Значение |
RSV3 | 1 бит | может записать в эти биты свои значения. |
Opcode | 4 бита | Тип сообщения |
Mask | 1 бит | Флаг маскированного сообщения |
Payload len (PL) | 7 бит | Длина сообщения, если оно не превышает 125 символов |
EPL | 2 байта | Длина сообщения, если PL=126. |
EPL con | 6 байт | Если PL=127, то длина сообщения – это EPL+ EPL con |
Mask Key | 4 байта | Ключ маски |
PD | – | Передаваемые данные |
Поле «Опкод» задаёт тип фрейма, который позволяет интерпретировать находящиеся в нём данные. Возможные значения:
– 0x1 – текстовые данные;