Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы 21-30.docx
Скачиваний:
5
Добавлен:
25.09.2019
Размер:
89.12 Кб
Скачать

30). Расширение JavaScript, область применения. Особенности программного обслуживания механизма Socket'ов на стороне сервера.

JavaScript — прототипно-ориентированный скриптовый язык программирования. Является диалектом языка ECMAScript.

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

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

На JavaScript оказали влияние многие языки, при разработке была цель сделать язык похожим на Java, но при этом лёгким для использования непрограммистами[4]. Языком JavaScript не владеет какая-либо компания или организация, что отличает его от ряда языков программирования, используемых в веб-разработке.

Название «JavaScript» является зарегистрированным товарным знаком компании Oracle Corporation.

Область применения

Веб-приложения

JavaScript используется в клиентской части веб-приложений: клиент-серверных программ, в котором клиентом выступает браузер, а сервером — веб-сервер, имеющих распределённую между сервером и клиентом логику. Обмен информацией в веб-приложениях происходит по сети. Одним из преимуществ такого подхода является тот факт, что клиенты не зависят от конкретной операционной системы пользователя, поэтому веб-приложения являются кроссплатформенными сервисами.

AJAX

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

Comet

Comet — зонтичный термин, описывающий механизм работы веб-приложений, использующих постоянные HTTP-соединения, что позволяет веб-серверу отправлять данные браузеру без дополнительного запроса со стороны браузера. Для таких приложений используются технологии, непосредственно поддерживаемые браузерами. В частности, в них широко используется JavaScript.

Браузерные операционные системы

JavaScript широко используется в браузерных операционных системах. Так, например, исходный код IndraDesktop WebOS на 75 % состоит из JavaScript, код браузерной операционной системы IntOS — на 70 %. Доля JavaScript в исходном коде eyeOS — 5 %, однако и в рамках этой операционной системы JavaScript играет важную роль, участвуя в визуализации на клиенте и являясь необходимым механизмом для коммуницирования клиента и сервера.

Букмарклеты

JavaScript используется для создания небольших программ, размещаемых в закладки браузера. При этом используются URL-адреса со спецификатором javascript:.

Пользовательские скрипты в браузере

Пользовательские скрипты в браузере — это программы, написанные на JavaScript, выполняемые в браузере пользователя при загрузке страницы. Они позволяют автоматически заполнять формы, переформатировать страницы, скрывать нежелательное содержимое и встраивать желательное для отображения содержимое, изменять поведение клиентской части веб-приложений, добавлять элементы управления на страницу и т. д.

Для управления пользовательскими скриптами в Mozilla Firefox используется расширение Greasemonkey; Opera и Google Chrome предоставляют средства поддержки пользовательских скриптов и возможности для выполнения ряда скриптов Greasemonkey.

Серверные приложения

Приложения, написанные на JavaScript, могут исполняться на серверах, использующих Java 6 и более поздних версий. Это обстоятельство используется для построения серверных приложений, позволяющих обрабатывать JavaScript на стороне сервера.

Помимо Java 6, существует ряд платформ, использующих существующие движки (интерпретаторы) JavaScript для исполнения серверных приложений. (Как правило, речь идёт о повторном использовании движков, ранее созданных для исполнения кода JavaScript в браузерах WWW.)

JavaScript на стороне сервера используется в проектах Google. Так например, Google Sites допускает подстройку с помощью JavaScript-сценариев, исполняемых движком Rhino.

Мобильные приложения

Перевод мобильных устройств Palm на использование Palm webOS в качестве операционной системы с Mojo SDK в качестве комплекта средств разработки позволяет использовать JavaScript в качестве языка разработки мобильных приложений.

Виджеты

Виджет — вспомогательная мини-программа, графический модуль которой размещается в рабочем пространстве соответствующей родительской программы, служащая для украшения рабочего пространства, развлечения, решения отдельных рабочих задач или быстрого получения информации из интернета без помощи веб-браузера. JavaScript используется как для реализации виджетов, так и для реализации движков виджетов. В частности, при помощи JavaScript реализованы Apple Dashboard, Microsoft Gadgets, Yahoo!_Widgets, Google Gadgets, Klipfolio Dashboard.

Прикладное программное обеспечение

Исходный код и скриншот JavaScript-программы, созданной с помощью Seed

JavaScript используется для написания прикладного ПО. Например, 16,4 % исходного кода Mozilla Firefox написано на JavaScript.

Google Chrome OS в качестве прикладного ПО использует веб-приложения.

В окружении рабочего стола GNOME имеется возможность создавать на JavaScript программы, оперирующие с библиотеками GNOME при помощи Gjs, Seed.

Манипуляция объектами приложений

JavaScript также находит применение в качестве скриптового языка доступа к объектам приложений. Платформа Mozilla (XUL/Gecko) использует JavaScript. Среди сторонних продуктов, например, Java, начиная с версии 6, содержит встроенный интерпретатор JavaScript на базе Rhino. Сценарии JavaScript поддерживаются в таких приложениях Adobe, как Adobe Photoshop, Adobe Dreamweaver, Adobe Illustrator и Adobe InDesign.

Офисные приложения

JavaScript используется в офисных приложениях для автоматизации рутинных действий, написания макросов, организации доступа со стороны веб-служб.

Microsoft Office

В Excel Services 2010 добавились два новых интерфейса программирования приложений: REST API и JavaScript Object Model (JSOM).

Excel Services 2010 REST API позволяет осуществлять доступ к объектам рабочих книг, таким как таблицы, диаграммы и именованные серии данных; получать изображения, HTML, Atom, рабочие книги; устанавливать значения и обновлять вычисления перед запрашиванием элементов.

JSOM даёт возможность реагировать на действия пользователя в отношении Excel Web Access (EWA), программно взаимодействовать с составляющими EWA. Использование JSOM осуществляется при помощи помещения кода JavaScript на страницу, содержащую компоненты EWA.

JavaScript — один из языков программирования, используемых для написания макросов в приложениях, входящих в состав OpenOffice.org. В OpenOffice.org интегрирован интерпретатор JavaScript Rhino. По состоянию на декабрь 2009 года поддержка JavaScript носила ограниченный характер. Ограничения, присущие разработке макросов OpenOffice.org на JavaScript:

среда выполнения JavaScript поддерживает загрузку лишь тех классов Java, которые развёрнуты сценарием JavaScript;

среда выполнения JavaScript не предоставляет сообщения об ошибках, произошедших во время выполнения скрипта;

ещё не реализована поддержка интерактивной разработки JavaScript-сценариев.

Обучение информатике

Язык обладает пропедевтической ценностью, позволяя сочетать при обучении информатике ( (англ.) Computer science) интенсивную практику программирования и широту используемых технологий. Преподавание данного языка в школе позволяет создать базу для изучения веб-программирования, использовать на уроках творческие проекты. Соответствующий курс позволяет обеспечить углубленный уровень изучения информатики и его имеет смысл включать в элективные курсы углубленного уровня подготовки.

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

Серверный сокет

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

Server Type-Определяет тип сервера с позиций работы с потоками передачи/приема данных. Значение stNonBlocking позволяет вести асинхронную работу с сервером посредством операторов чтения/записи. Альтернативный вариант— значение stThreacffllocking устанавливает поток обмена данными с сервером, через который и ведется работа

ThreadCacheSize-Содержит число потоков, которые кэшируются в памяти. Для ускорения работы с клиентами, объект ServerSocket после завершения соединения с клиентом не выгружает из памяти содержимое потоков ввода/вывода с целью последующего их использования при работе с другими клиентами. Данный параметр устанавливает число хранимых в памяти потоков

Active-Определяет — активен ли сокет

Port-Содержит номер сетевого порта, на который установлена служба, работу которой обеспечивает данный сокет

Service-Содержит название службы, точнее — протокола высокого уровня (HTTP, FTP, POP), по которому будет вестись работа. Если используется собственный формат обмена данными, поле можно оставлять пустым

Аналогично клиентскому сокету, в сетевом сокете основную функциональную нагрузку несет на себе объект, указанный в поле socket, который будет описан чуть позже. Наиболее часто используемые методы объектов класса

Аналогично клиентскому сокету, вызов метода open устанавливает значения поля Active в true, а вызов close — в false.

OnClientConnect-Возникает после завершения процесса соединения с клиентом

OnCl lent Disconnect-Возникает после рассоединения с клиентом

OnClientError-Возникает при наличии ошибки

OnClientRead-идентифицирует состояние, когда необходимо извлекать присланные от клиента данные .

OnClientWrite-Идентифицирует состояние, когда клиентский сокет ждет передачи данных от серверного

OnGetSocket-Возникает, когда установлено соединение с клиентом, и этому соединению можно назначить свой экземпляр объекта, реализующий основные возможности работы с клиентом — ServerClientWinSocket. Если программист хочет реализовать специфичные задачи, то он должен написать процедуру, возвращающую конкретный объект класса TServerClientWinSocket, который станет обслуживать запросы конкретного клиента (в результате соединения с которым и возникло это событие)

OnGetThread-Возникает, когда можно назначать конкретный поток сетевому соединению

OnThreadEnd-Возникает, когда соединение с клиентом завершено и соответствующий ему поток уничтожается

OnThreadStart-Возникает в связи с инициализацией потока, ассоциированного с данным сетевым соединением

OnAccept-Возникает, как только подтверждено создание соединения с клиентом

OnListen-Возникает непосредственно перед началом процесса последовательных опросов порта на предмет новых клиентских соединений.

Как и в случае с клиентским сокетом, для работы с сокетными подключениями создается объект, доступный посредством свойства Socket. Необходимо учитывать, что серверный сокет может обслуживать несколько подключений одновременно, и поэтому для каждого подключения существует свой экземпляр объекта, предоставляющий сетевые сервисы.

Обратите внимание, что, как и в случае клиентского сокета, объект ServerSocket служит для установления и обслуживания общих свойств соединения, но в нем свойство socket указывает не на конечное соединение, а на другой объект — serverwinsocket, который в свою очередь осуществляет менеджмент соединений.

ActiveConnections-Содержит число текущих соединений

ActiveThreads-Содержит число запущенных потоков, посредством которых и происходит обмен данными

Connections-Возвращает число текущих соединений с клиентами

IdleThreads-Содержит число потоков, хранящихся в кэше сокета

ServerType-Определяет тип сервера с позиций работы с потоками передачи/приема данных. Значение stNonBlocking позволяет вести с сервером асинхронную работу посредством операторов чтения/записи. Альтернативный вариант— stBlocking устанавливает поток обмена данными с сервером, через который и ведется работа

ThreadCacheSize-Содержит число потоков, которые кэшируются в памяти

Addr-Содержит полное описание данного сокета (адрес, имя в DNS, протокол, порт)

Connected-массив объектов класса TCustomWinSocket, предоставляющий доступ к методам и свойствам этих объектов. Каждому соединению соответствует свой индекс массива, в порядке подключения

Handle-Содержит Handle окна в графической системе Windows, на которое должны приходить сообщения о состоянии сокета. По умолчанию, все сообщения приходят на окно, содержащее сам сокет

LocalAddress-Содержит IP-адрес сервера

LocalHost-Содержит имя сервера в DNS

LocalPort-Указывает номер порта, на котором размещена эта сетевая служба

RemoteAddr-Содержит IP-адрес клиента

RemoteHost-Содержит имя клиента в DNS

ReraotePort-Указывает номер сетевого порта, используемого программой, с которой ведется взаимодействие

SocketHandle-Содержит Handle, присвоенное данному сокету

Handle окна, или другого объекта, это целое число, которое им присваивается операционной системой Windows. При обычном создании окон с помощью Delphi программисту незачем использовать этот параметр, но если окна создаются путем прямого вызова API-функций или модернизируются ими, к примеру, делаются полупрозрачными или овальными, то параметр Handle используется повсеместно. Кроме того, если вы хотите работать напрямую с системой Windows, окнами и процессами другого приложения, то индексация нужных объектов также осуществляется путем использования этих параметров.

Disconnect-Закрывает то сокетное соединение, Handle которого указан в параметре

Listen-Инициирует процесс опроса порта на предмет получения запроса на сетевое соединение

Close LookupName-Закрывает текущее соединение

Извлекает из URL часть, являющуюся именем ресурса, и заполняет соответствующее поле записи, описывающей удаленный или локальный ресурс (ilnAddr)

LookupService-То же, что и предыдущий, только касательно названия службы (протокола высокого уровня)

Open-Открывает соединение

ReceiveBuf-Считывает информацию, пришедшую на сокет с сервера в буфер

ReceiveLength-Содержит число бит (символов), которые получены сокетом, и их нужно считать

ReceiveText-Возвращает строку, содержащую данные, полученные в результате взаимодействия с клиентом

SendBuf-Отправляет содержимое буфера, указанного в параметре, серверу

SendStream-Перенаправляет поток, указанный в качестве параметра, серверу

SendStreamThenDrop-Действие аналогично предыдущему с закрытием соединения после завершения передачи

SendText-Отправляет содержимое строки, указанной в качестве параметра, серверу

Легко заметить, что основные методы, предназначенные для приема/отправки данных, одинаковы у объектов класса TServerwinSocket и TClientwinSocket. Связано это с тем, что они оба являются наследниками класса TCustonwinSocket. Естественно, что и работа с данными методами объектов указанных классов одинакова. Поэтому, чтобы узнать, как читать и отправлять данные, используя серверный сокет, загляните в соответствующий раздел описания клиентского сокета.

События объектов класса TServerwinSocket и TServerSocket практически одинаковы, поэтому на них мы подробно останавливаться не будем.

Пример реализации сокетного сервера

Мы можем создать сокетный сервер, используя обычные визуальные средства Delphi. Это освободит нас от обработки множества событий. По сути, серверные приложения, базирующиеся на сокетах, создаются точно так же, как и клиентские. Отличие заключается в том, что после установки всех свойств и активизации объекта клиентский сокет пытается установить соединение с сервером, а серверный опрашивает сетевой порт. Как бы там ни было, все, что нужно сделать в примере, — это поместить объект в форму, установить его свойства и активизировать. Только нужно поместить обработчик события OnClientRead.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]