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


 

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

19085. Нанотрубки и родственные структуры 309.5 KB
  Лекция 15. Нанотрубки и родственные структуры. Историческая справка Первооткрыватели Углеродные наноструктуры: фуллерены нанотрубки графен 1985 г. Открытие фуллеренов С60 Авторы: H.W.Kroto J.R.Heath S.C.O'Brien R.F.Curl R.E.Smalley Организации: Rice Quantum Inst. and Departments of Chemistry and Electrical...
19086. Применения наноструктур 2.59 MB
  Лекция 16. Применения наноструктур. Настоящая лекция посвящена рассмотрению конкретных примеров применении различных наноструктур. СВЕТОИЗЛУЧАЮЩИЕ НАНОТРУБКИ В ТЕЛИВИЗОРАХ И ДИСПЛЕЯХ. Углеродным нанотрубкам уже найдено немало применений в том числе в качестве эл...
19087. Общая постановка задачи дискретизации 155 KB
  Лекция № 1. Введение. Общая постановка задачи дискретизации. Цели и задачи курса: данный курс предназначен для освоения базовых понятий теории дискретных сигналов и основных принципов построения систем цифровой обработки сигналов. Курс знакомит с теоретическими о
19088. Выбор частоты дискретизации с помощью функций отсчетов 187.5 KB
  Лекция № 2. Выбор частоты дискретизации с помощью функций отсчетов. Теорема Котельникова: произвольный сигнал непрерывный спектр которого не содержит частот выше может быть полностью восстановлен если известны отсчетные значения этого сигнала взятые через равн
19089. Выбор шага дискретизации с использованием интерполирующих полиномов Лагранжа 181 KB
  Лекция № 3. Выбор шага дискретизации с использованием интерполирующих полиномов Лагранжа. При дискретизации реального сигнала описываемого непрерывной функцией имеющей ограниченную производную в качестве аппроксимирующей воспроизводящей функции может ис
19090. Выбор шага дискретизации с использованием экстраполирующих многочленов Тейлора 227 KB
  Лекция № 4. Выбор шага дискретизации с использованием экстраполирующих многочленов Тейлора. Экстраполирующий многочлен Тейлора описывающий исходную функцию определяется выражением: 4.1 где соответственно первая вторая и производные непрерывной ...
19091. Работа со cписками и Базы данных в Excel 336.71 KB
  Excel располагает набором функций, предназначенных для анализа списка. Одной из наиболее часто решаемых с помощью электронных таблиц является обработка списков. Вследствие этого Microsoft Excel имеет богатый набор средств, которые позволяют значительно у простить обработку таких данных. Ниже приведено несколько советов по работе со списками.
19092. Квантование сигналов по уровню 326.5 KB
  Лекция № 5. Квантование сигналов по уровню. Постановка задачи. Процесс преобразования сигнала с непрерывным множеством значений в сигнал с дискретными значениями называют квантованием по уровню. По существу операция квантования заключается в округлении значения...
19093. Ортогональные преобразования сигналов в базисе функций Уолша 222.5 KB
  Лекция № 6. Ортогональные преобразования сигналов в базисе функций Уолша. При обработке дискретных сигналов большое значение представляет ортонормированная система базисных функций Уолша. Непрерывные функции Уолша относятся к классу кусочнопостоянных знакопере