77227

Реализация подключения виртуальной машины Neko к http-серверу с помощью интерфейса FastCGI

Курсовая

Информатика, кибернетика и программирование

Взаимодействие приложения и http-сервера реализуется при помощи FastCGI-модуля на стороне сервера и использующихся при написании приложения FastCGI-библиотек для различных языков программирования.

Русский

2015-02-02

61 KB

2 чел.

Санкт-Петербургский Государственный Университет

Математико-механический факультет

Кафедра системного программирования


Реализация подключения виртуальной машины Neko к http-серверу с помощью интерфейса FastCGI.

Курсовая работа студента 445 группы
Ларчика Евгения Владимировича

Научный руководитель      М. М. Плискин

Санкт-Петербург

2009

Содержание

Оглавление


[1] Оглавление

Введение

В рамках данной курсовой работы рассматривается взаимодействие http-сервера и стремительно набирающей популярность виртуальной машины Neko [1] через интерфейс FastCGI [2]. Интерес к Neko во многом обусловлен тем, что она является одной из платформ, для которых можно писать приложения на языке программирования haXe[3]. Кроме Neko, на haXe можно создавать приложения ещё для трёх платформ: JavaScript, Flash  и с недавнего времени PHP. Помимо стандартной библиотеки языка, работающей одинаково на всех платформах, существуют также платформенно-зависимые библиотеки, реализующие специфические для конкретных платформ возможности. Таким образом, с помощью haXe можно создавать web-приложения на одном языке программировании от начала и до конца, используя возможности Flash и JavaScript в клиентской части приложения, и возможности Neko или PHP – в серверной. Кроме того, программируя на haXe для Neko, можно разрабатывать приложения для командной строки и рабочего стола.

Код на haXe, написанный для Neko, компилируется в байт-код, который хранится в файлах с расширением .n (так называемых neko-модулях) и может быть исполнен виртуальной машиной. Сама виртуальная машина Neko написана на языке С, поддерживает динамическую типизацию и использует внутри себя сборщик мусора. Интересной особенностью Neko является то, что в ней предусмотрена возможность загружать и выполнять код из сторонних библиотек, написанных на С (при условии, что они написаны в терминах (typedefs) виртуальной машины).

Интерфейс FastCGI – это протокол взаимодействия сервера и приложения, расширение технологии CGI. Так же, как и в CGI, FastCGI-приложения выполняются в отдельных процессах, изолированных от http-сервера, а информация о запросе (request) передаётся в приложение при помощи переменных среды. Однако FastCGI ликвидирует множество ограничений CGI-программ. Проблема CGI-программ в том, что они должны быть перезапущены http-сервером при каждом запросе. FastCGI убирает это ограничение, сохраняя процесс запущенным и передавая запросы этому постоянно запущенному процессу. Это позволяет не тратить время на запуск новых процессов и инициализацию ресурсов. Кроме того, FastCGI-приложения могут использовать протокол TCP/IP для взаимодействия с сервером, а значит, могут быть запущены не только на том же компьютере, но и где угодно в сети.

Взаимодействие приложения и http-сервера реализуется при помощи FastCGI-модуля на стороне сервера и использующихся при написании приложения FastCGI-библиотек для различных языков программирования. Эти библиотеки в основном переопределяют стандартные методы ввода/вывода. В рамках данной курсовой работы использовалась библиотека libfcgi, написанная  на языке C.

Постановка задачи

Несмотря на появление в haXe поддержки PHP, виртуальная машина Neko остаётся наиболее часто используемой платформой для создания серверной части web-приложений. Однако её использование накладывает ограничение на выбор http-сервера для размещения приложения, т.к. на данный момент она поддерживается только http-сервером Apache (c помощью модулей mod_neko и mod_tora). И хотя http-сервер Apache является самым популярным, зачастую можно обойтись менее функциональными и оттого менее громоздкими http-серверами (например, lighthttpd, nginx и другими). Соответственно, появляется задача портирования Neko на эти http-серверы. Одним из способов решить эту задачу является использование интерфейса FastCGI. Модули для поддержки FastCGI существуют для всех известных http-серверов, поэтому если реализовать совместную работу Neko и FastCGI, то Neko можно будет подключить к любому http-серверу. Кроме того, для http-сервера Apache использование связки Neko-FastCGI вместо mod_neko позволяет реализовать преимущества FastCGI над CGI, о которых говорилось выше.

Таким образом, цель данной курсовой работы состоит в следующем: исследовать возможность взаимодействия виртуальной машины Neko и http-сервера с помощью FastCGI и реализовать такое взаимодействие.

Результаты

В рамках данной курсовой работы была реализована архитектура, представленная на рис.1:

Рис.1

Запрос идёт не к neko-модулю напрямую, а к FastCGI-приложению main.fcg (имя исполняемого модуля можно передать параметром запроса, либо задать константой в main.fcg). Этот запрос обрабатывается FastCGI-модулем сервера, который устанавливает значения нужных переменных среды и только затем передаёт управление  непосредственно main.fcg.

main.fcg – это приложение на языке C со следующей структурой:

// создание и инициализация экземпляра виртуальной машины neko 

while (FCGI_Accept() >= 0) {

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

// исполнение модуля

// обработка ошибок

}

Создание и инициализация виртуальной машины выполняется один раз при первом запросе к main.fcg. При каждом следующем запросе выполняется только тело цикла while. При возникновении ошибок во время выполнения модуля выводится описание ошибки и место её возникновения,  а также стек вызовов методов.

Поскольку исполняемые neko-модули в нашем случае выполняют роль серверной части приложения, то они использую API для работы с запросами и формирования ответов (response). Все методы этого API описываются в классе neko.Web, однако их реализации на этапе компиляции не определены и загружаются динамически. По умолчанию, если модуль исполняется с помощью mod_neko, они загружаются из библиотеки mod_neko.ndll, в противном случае используются реализации-заглушки, которые ничего не выполняют и возвращают нулевые значения. Поэтому механизм загрузки реализаций  методов был изменён так, чтобы поддерживать загрузку методов из реализованной мной библиотеки neko-fastcgi.ndll. Эта библиотека также написана на С и реализует методы для работы с запросами и ответами, используя механизмы FastCGI.

Таким образом, виртуальная машина Neko может быть теперь подключена к любому http-серверу, поддерживающему FastCGI.

Список литературы

  1.  nekoVM

http://nekovm.org

  1.  FastCGI

http://fastcgi.com

  1.  haXe

http://haxe.org

PAGE   \* MERGEFORMAT 5


 

А также другие работы, которые могут Вас заинтересовать

6171. Налаштування магістральних портів для зєднання комутаторів 99.5 KB
  Виконати спостереження за конфігурацією VLAN комутатора і його роботою. Виконати налаштування статичних VLAN на комутаторі. Перевірити конфігурацію VLAN і її роботу. Виконати налаштування магістралі між комутаторами
6172. Автосервис и фирменное обслуживание 8.35 MB
  Приведены материалы, необходимые при выполнении дипломных проектов по кафедре технологии обслуживания транспортных средств. Тематическая направленность проектов соответствует профессиональной деятельности выпускников на предприятиях автосервиса и фи...
6173. Создание, изменение и удаление таблиц в SQL Oracle 208 KB
  Создание, изменение и удаление таблиц в SQL Oracle Цели лабораторной работы Изучить возможности SQL Oracle по созданию, изменению и удалению таблиц. Приобрести практический опыт по созданию, изменению и удалению таблиц в SQL*Plus. ...
6174. Creation altering and deletion a table in SQL Oracle 206.5 KB
  Creation altering and deletion a table in SQL Oracle Purpose of the lab To study SQL Oracle possibilities in table creation, altering and deletion. To acquire practical skills in table creation, altering and deletion by using SQL*P...
6175. Integrity constraints in SQL Oracle 182 KB
  Integrity constraints in SQL Oracle Purpose of the lab To study SQL Oracle integrity constraints possibilities. To acquire practical skills in describing integrity constraints. Theoretical backgrounds You can define integrity...
6176. Системи захисту програмного забезпечення 72.5 KB
  Системи захисту програмного забезпечення 1. Класифікація систем захисту програмного забезпечення Системи захисту програмного забезпечення (СЗПЗ) широко поширені і знаходяться в постійному розвитку, завдяки розширенню ринку програмного забезпечення і...
6177. Понятие экономических информационных систем, принципы их построения и функционирования 71.05 KB
  Понятие экономических информационных систем, принципы их построения и функционирования. Критерии оценки ЭИС. Классификация ЭИС. Изучение ЭИС можно декомпозировать следующим образом: компоненты ЭИС, как работают ЭИС, динамика развития ЭИС, как управл...
6178. Закупівельна логістика 108 KB
  Закупівельна логістика. Сутність закупівельної логістики. Задачі закупівельної логістики. Служба закупівель на підприємстві. Задача зробити чи купити у закупівельній логістиці. Задача вибору постачаль...
6179. Модели данных: нормализация отношений 80.5 KB
  Модели данных: нормализация отношений. 1НФ. Нормализация отношений Центральная задача проектирования базы данных ЭИС - определение количества отношений и их атрибутного состава. Задача группировки атрибутов в отношения допускает множеств...