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


 

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

78566. Правила для учнів 128.5 KB
  Обговорення відомих правил для учнів Заходить вчитель треба встать Коли тобі дозволять сядь Сказати хочеш не гукай А тільки руку піднімай. Сьогодні ми продовжимо складати нові правила для учнів запам’ятовувати їх і виконувати. Друге правило для учнів Вчасно йди завжди до школи Та не спізнюйся ніколи.
78567. Вчимо правила безпечної поведінки, граючи 94.5 KB
  Мета: Навчити учнів дотримуватися правил безпечного переходу вулиць і доріг повторити правила дорожнього руху розглянути причини ДТП вчити запобігати їх виникнення. Я допомагаю машинам і пішоходам виконувати правила дорожнього руху.
78568. ОСНОВНІ ПРАВОПОРУШЕННЯ 32.5 KB
  Мета: Сформулювати уявлення про правопорушення; познайомити з видами правопорушень; вчити учнів бути чесними громадянами України; виховувати негативне ставлення до правопорушень норм моралі та прав людини. Сьогодні на уроці ми поговоримо про правопорушення.
78569. Мы школьниками стали 43 KB
  Ведущий: Ну, конечно, в первый! Мы проучились в нем...месяца и стали настоящими учениками. Приглашаем всех на весёлый праздник - «Мы школьниками стали». 3-й ученик: Пусть зовут нас «шестилетки»! пусть не ставят нам отметки! Не ведём мы дневники!
78570. Повторення вивченого про прикметник. Спостереження за роллю прикметників у мовленні 90 KB
  Прикметники-синоніми прикметники-антоніми та прикметники багатозначні слова. Спиши вставляючи в речення потрібні за змістом прикметники. Випиши прикметники. Опиши поданий український вишитий рушник використовуючи різні прикметники.
78571. Водойми, їх різноманіття 49 KB
  Вода. Під горою під крутою не ріка тече струною Це холодна б’є вода із старого Джерела. Яке значення має вода на Землі Які водойми суші ви знаєте Яким кольором позначають воду на карті глобусі IV Вивчення нового матеріалу 1. Вода напуває Землю яка годує людину.
78572. Збережемо природу Землі разом 95 KB
  Мета. Поглибити і розширити знання учнів про вплив людини на природу Землі. Підвести дітей до усвідомлення необхідності зберігати та примножувати природні багатства, раціонально їх використовувати.
78573. Що належить до природи. Жива і нежива природа 35.5 KB
  Мета: розширити знання учнів про різноманітність природи; формувати уявлення про живу та неживу природу; вчити відрізняти предмети природи від речей виготовлених людиною; розвивати вміння спостерігати за об’єктами природи; виховувати дбайливе ставлення до природи речей створених людиною.
78574. Охорона природи України 165.5 KB
  Поглибити і розширити знання дітей про роль природи її вплив на людину про необхідність збереження і охорони природного середовища; підвести дітей до усвідомлення необхідності зберігати і примножувати природні багатства раціонально їх використовувати.