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


 

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

17479. Организационное обеспечение и пользователи АИС 36.5 KB
  Организационное обеспечение и пользователи АИС В состав организационного обеспечения АИС принято включать структурные подразделения организации осуществляющие управление технологическими процессами и поддержку работоспособности системы а также совокупность док
17480. Некоторые поисковые возможности и характеристики систем Yandex и Rambler 392.5 KB
  Некоторые поисковые возможности и характеристики систем Yandex и Rambler. Стандартный поиск Yandex. Рассмотрим общий вид стандартной поисковой формы Yandex рис. 2.20. 1. Основная поисковая форма. Главный ее элемент строка запроса. При желании можно искать только в результатах пр
17481. Структура и классификация автоматизированных информационных систем 103.5 KB
  Структура и классификация автоматизированных информационных систем Цели изучения темы: общеобразовательная прочное усвоение знаний о составе и структуре АИС; развивающая развитие логического мышления; воспитательная формирование представлений об осн...
17482. АИС. Автоматизированные информационные системы 114 KB
  Введение. Ни одно современное предприятие не обходится без систем сбора и обработки информации. Чем больше стадий производства чем оно сложнее чем больше и разнообразнее спектр производимых продаваемых изделий или предлагаемых услуг тем больше потребность в автомат...
17483. Формати і правила роботи з командами організації циклів і роботи з ланцюгами мікропроцесора i8086 31.55 KB
  Лабораторна робота №6 З дисципліни СПіОС на тему: Формати і правила роботи з командами організації циклів і роботи з ланцюгами мікропроцесора i8086 Мета: Ознайомитись з правилами роботи команд організації циклів і роботи з ланцюгами мікропроцесора i8086. Вивчити осн
17484. Ввід інформації із клавіатури 27.12 KB
  Лабораторна робота №7 З дисципліни СПіОС на тему: Ввід інформації із клавіатури Мета: Ознайомитись з правилами обробки переривань для роботи із клавіатурою. Завдання: Створіть файл у який записано слово пароль. Напишіть програму яка запитує введення па
17485. Вивчення арифметичних команд мікропроцесора i8086 37.37 KB
  Лабораторна робота №2 З дисципліни СПіОС на тему Вивчення арифметичних команд мікропроцесора i8086 Лабораторна робота №2 Мета: Вивчити арифметичні команди мікропроцесора i8086 і правила їх використання. Завдання: Реалізувати можливість введення даних з клавіа...
17486. Вивчення способів адресації даних мікропроцесором i8086 і їх використання при пересиланні даних 47 KB
  Лабораторна робота №1 З дисципліни СП та ОС Мета: Вивчення способів адресації даних мікропроцесором i8086 і їх використання при пересиланні даних. Теоретичні відомості: Мікропроцесор вибирає один з семи режимів адресації за значенням поля режиму команди: регіс
17487. Формати і правила роботи з командами передачі керування, умовних і безумовних переходів, порівняння мікропроцесора i8086 41.09 KB
  Лабораторна робота №5 З дисципліни СПіОС на тему: Формати і правила роботи з командами передачі керування умовних і безумовних переходів порівняння мікропроцесора i8086 Мета: Ознайомитись з правилами роботи команд передачі керування умовних і безумовних пере