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


 

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

82190. Містечко дитячих мрій 41 KB
  Так розпочалося дитинство мого дідуся. Взимку коли за вікном хурделиця і сніг ласкаво проситься до хати в мого дідуся оживають спогади про далеке минуле. Але слухаючи сповідь мого дідуся я поринаю в ті далек незрозумілі для мене часи сповнені дитячого смутку та горя. Так продовжувалося дитинство мого дідуся.
82191. Ми роду козацького діти, землі української цвіт 4.39 MB
  Розширити знання учнів про славне минуле українського народу, ознайоми ти з одним із відомих гетьманів України І.Мазепою, боротьбою українсько го народу за волю, незалежність, віру і щастя, виховувати любов до Украї ни, інтерес до історичного минулого, почуття національної свідомості та громадянської активності.
82192. Алкоголь — ворог №1 24.5 KB
  Ворога потрібно знати в обличчя: а вплив алкоголю на стравохід; б дія алкоголю на шлунок; в вплив алкоголю на кишківник; г вплив алкоголю на печінку; д вплив алкоголю на кров; е вплив алкоголю на серце; є вплив алкоголю на підшлункову залозу; ж вплив алкоголю на мозок.
82193. Сучасні українці — жертви алкогольної реклами 2.99 MB
  Текст вірша: Всі ті, хто за тверезу Україну Підняти хочуть Україну із руїни. Що не дає тобі цвісти, Вкраїно-ненько? Ой, страшний є у мене, лютий вороженько. Найбільша цінність наша — хто? Це наші діти. Їх, молодих, найбільше хоче він споїти. Ой, як голівоньку їм нелюди морочать: Позбавить розуму всю нашу молодь хочуть!
82194. Олимпийский урок 53.5 KB
  Познакомить с историей Олимпийских игр. Чего вы ожидаете от предстоящих зимних Олимпийских игр в России К нам приедет много гостей построят спортивные комплексы. Последние зимние Олимпийские игры прошли в Италии в городе Турине в 2006 г. XXII летние Олимпийские игры состоялись в Москве в1980 г.
82195. Осінь-чарівниця 891.5 KB
  Мета: учити дітей бачити зміни природи восени, виховувати у дітей естетичних почуття, любов до природи рідного краю, уміння розуміти її красу, уловлювати настрій, викликаний картинами природи; розширити кругозір дітей, сприяти розвитку інтересу до явищ природи та її загадок.
82196. Великие реформы 60 -70-х гг. XlX века 49.38 KB
  Начиная эту реформу правительство Александра ll надеялось провести модернизацию общества которая была так важна России в этот период. Однако отмена крепостного права не могла пройти бесследно для России так как господствовал крепостной строй. должны были способствовать ускорению или торможению модернизации России...
82197. Потребление. Потребитель. Права потребителей и их защита 51.95 KB
  Словарь урока: потребитель продавец недостаток товара материальный ущерб моральный вред гарантийный срок срок годности срок службы товара. Право на информацию о товарах услугах работах. Она нужна чтобы потребитель смог сделать правильный выбор для этого ему нужно знать качества и свойства того или иного товара.
82198. Реки России 104.5 KB
  Цель урока: Изучить особенности рек России. Расширить и углубить знания о реках. Сформировать понятия базис эрозии, уклон, падение реки, расход воды в реке, годовой сток, твёрдый сток. Показать влияние климата и рельефа на реки. Формировать умение определения уклона и падения реки.