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


 

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

82223. Проведення реєстрації осіб, які виявили бажання пройти зовнішнє незалежне оцінювання. Робота з програмою створення заяви-реєстраційної картки 206.5 KB
  Мета уроку: ознайомити учнів з порядком реєстрації на зовнішнє незалежне оцінювання, навчити учнів користуватися програмою реєстрації на ЗНО, ознайомити учнів з правами та обов’язками осіб, які бажають взяти участь у ЗНО, розвивати в учнів самостійність, виховувати в учнів почуття відповідальності.
82224. Урок-тренинг «Здоровый образ жизни» 176.5 KB
  Нам всегда не хватает времени поговорить о наболевших вопросах поэтому сегодня в кругу друзей мы хотим поговорить о здоровом образе жизни. Упражнение От чего зависит здоровье Цель: определить что собственное поведение образ жизни является главнейшим фактором влияющим на здоровье человека.
82225. Земля на зернятці стоїть 2.5 MB
  Господар: Хліб - це те що завжди було турботою і радістю людини чому вона віддавала свій труд і талант. Хліб для кожного з нас звичний як сонячне світло чи дихання і таке ж необхідне. Без хліба не можна уявити ні степової далі ні світанку ні рідного дому.
82226. НЕДОСПІВАНА ПІСНЯ ВОЛОДИМИРА ІВАСЮКА 87 KB
  Сцена приміщення у тематичному оформленні: на заднику - портрет Володимира Івасюка, знизу – напис – 62; на античних колонах – квіткові композиції, на передньому плані – мольберт, на якому знаходиться скрипка, біля неї - дві червоні троянди, перев’язані чорною стрічкою, збоку – журнальний столик...
82227. Что гибель нам! Мы даже смерти выше! 44.5 KB
  Нет ей не страшно было разносить листовки и участвовать в поджоге биржи потому что рядом были её друзья а ещё его Любовь: Наши войска были ещё далеко. Всюду слышалась немецкая речь и это ещё сильнее теребило душу. Наверное ещё и потому что героическое в жизни порой выглядело просто буднично.
82229. Калинове свято 122.5 KB
  Підготовка: намалювати малюнки вишити серветки та рушники з калиною знайти і вивчити загадки прислівя прикмети повязані з калиною протягом тижня перед святом на столі тарілка з кетягами калини і діти смакують соковиті ягоди...
82230. Формування правильної постави засобами фізичних вправ 49.5 KB
  Мета уроку: укріпити здоров’я учнів, формувати правильну поставу, сприяти профілактиці плоскостопості; вироблення гарної ходи, вміння правильно сидіти за партою. Тип уроку: вивчення та узагальнення знань. Час:45 хв. Інвентар: гімнастичні килимки, мішечки з піском, магнітофон, музичні диски.
82231. Щоб навчання було цікавим. Нестандартні уроки 69 KB
  Нестандартні уроки більше подобаються учням ніж буденні навчальні заняття. Нестандартний урок - це прогрес педагогічної думки правильний крок у напрямку демократизації школи. Мойсеюк Нестандартний урок - це імпровізоване навчальне заняття що має нестандартну структуру.