Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Можно ли запустить C++ exe как fastcgi на windows IIS?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: получается запускать как cgi. Но не fastcgi.
manking
Отправлено: 09 Ноября, 2010 - 00:40:24
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Для fastcgi на IIS требуется указать обработчик exe или dll.

Если использовать php как fastcgi.
То в качестве обработчика указываю php-cgi.exe который в папке с самим php.
И все работает.

У .exe файлов я вижу в качестве обработчика только cmd.exe.
Но это консольный обработчик. А нужен windows.


Получается настроить это дело в apache.
Но в IIS7.5 ничего не выходит.
 
 Top
DeepVarvar Супермодератор
Отправлено: 09 Ноября, 2010 - 08:25:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




C++ это компилятор вобще-то.
Как вы себе представляете его работу в серверном окружении? Что он там компилировать будет? Непонятные цели...
 
 Top
Мелкий Супермодератор
Отправлено: 09 Ноября, 2010 - 11:01:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DeepVarvar пишет:
C++ это компилятор вобще-то.

Не понял Поздравляю всех, кто знаком с этим языком - оказывается, мы пишем на компиляторе, а не на языке, который потом компилируем компилятором!
А язык-то тогда какой С++ компилит? Ну чтобы точно уже знать? Радость

manking пишет:
У .exe файлов я вижу в качестве обработчика только cmd.exe.
Но это консольный обработчик. А нужен windows.

А в чём, простите, разница? У виндов нет cmd?
Вот под апач пример настройки: http://habrahabr[dot]ru/blogs/cpp/61532/


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 09 Ноября, 2010 - 11:05:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Мелкий пишет:
Поздравляю всех, кто знаком с этим языком - оказывается, мы пишем на компиляторе

Мелкий посмотрите название темы, в контексте вопроса имеется виду не язык.
 
 Top
Мелкий Супермодератор
Отправлено: 09 Ноября, 2010 - 11:10:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DeepVarvar, перечитал. Спрашивается: "как запустить приложение, написанное на С++, как fastcgi под M$ IIS"
И где тут про компилятор?


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 09 Ноября, 2010 - 11:28:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Мелкий, перечитал и я, теперь понял что было нужно...
 
 Top
JustUserR
Отправлено: 09 Ноября, 2010 - 13:17:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




manking пишет:
Для fastcgi на IIS требуется указать обработчик exe или dll
Возможность использования различных конфигурационых схем обработки запрашиваемых ресурсов и URL-адресов на IIS-сервере обеспечивается с учетом возможности сохранения совместимости с активными компонентами среды выполнения - по этой причине для огранизации произвольного FastCGI-обработчика целесообразно создание собственного .NET-приложения обеспечивающего реализацию функциональности API сервера - в частности использования HadlerFactory для генерации обработчиков реального времени


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
manking
Отправлено: 09 Ноября, 2010 - 16:18:55
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Мелкий пишет:

А в чём, простите, разница? У виндов нет cmd?
Вот под апач пример настройки: http://habrahabr.ru/blogs/cpp/61532/


На IIS указание cmd обработчиком приводит к ошибке 500. К тому же поднятие консоли при каждом запросе, приведет к падению производительности(по крайне мере так выглядит).

Эту статью читал, но там используется сокеты. А при CGI вывод cout print идет сразу в браузер.
Попробую с сокетами.

JustUserR пишет:
в частности использования HadlerFactory для генерации обработчиков реального времени

А вот здесь не совсем понимаю.

Выходит как. При CGI исполнении exe файла, создается процесс в windows.
например приложение web.exe создаст процесс web.exe который виден в диспетчере задач.

Это приложение выполнилось, все cout printf выводы отдало в браузер. И завершилось.

Но если оно выполняется долго, то новый посетитель не сможет получить доступ к этому приложению, пока оно не выполниться. Я проверял, кликаю в браузере по ссылке, но оно возвращает пустую страницу.


Вот здесь 2 выхода, либо как то применять новое название для процесса
web.exe , web1.exe , web3.exe . Как это сделать представления не имею. Это нужно ковырять ядро win.

2 выход это создать свой обработчик exe. Который создает один процесс. И принимает запросы на запуск приложений, но создает для каждого нового обращения свой поток
внутри этого процесса.
Видимо php-cgi.exe это и есть подобный обработчик для php. Для других языков типа perl python он тоже должен быть.

Но вот есть ли такой для c++? Ведь писать собственный это как я понял огромный труд на 3-4 месяца?
 
 Top
DeepVarvar Супермодератор
Отправлено: 09 Ноября, 2010 - 16:40:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




manking пишет:
то новый посетитель не сможет получить доступ к этому приложению

Для этого нужны threads, именно так и достигается многопоточная работа одного приложения. Я не силен в С++, однако если смотреть на тот же пхп - есть возможность ветвления процессов для одновременной обработки различных задач и вычислений. В контексте С++ я так предполагаю после ф-ции main необходимо создать возможность ветвления с однозначной "индентификацией" того кто эту ветвь запустил, для отдачи результата именно тому кто запускал... А вот как оно там делается в С++ я не знаю...
 
 Top
JustUserR
Отправлено: 09 Ноября, 2010 - 22:31:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




manking пишет:
А вот здесь не совсем понимаю. Выходит как. При CGI исполнении exe файла, создается процесс в windows.
например приложение web.exe создаст процесс web.exe который виден в диспетчере задач.
Это приложение выполнилось, все cout printf выводы отдало в браузер. И завершилось.
Но если оно выполняется долго, то новый посетитель не сможет получить доступ к этому приложению, пока оно не выполниться. Я проверял, кликаю в браузере по ссылке, но оно возвращает пустую страницу.
Приведенный вами пример обеспечения работоспособности исполняемого exe-приложения не согласован для использованя его для обработки пользовательских запросов посредством интерфейса CGI - для реализации такой системы взамодействия необходимо обеспечение получения введенных пользователем информационных полей из переменной окружения QUERY_STRING как GET-данные - и осуществлять считывание из потока STDIN в размере приведенном в значении переменной окружения CONTENT_LENGTH при условии установки значения POST в параметре REQUEST_METHOD После осуществления получения указанных информационных полей - производится их преобразования в форму ассоциативного массива - посредством применения операции строкового разбиения и urlencode-декодирования отноительно входящих компонентов
После осуществления основной функциональности вашег приложения - производится вывод пользователю документа HTTP-ответа - включающего в себя обязательные HTTP-заголовки типа Content neogation - и представляющие собой в частном и широко используемом случае значение Content-type Обеспечение целевого пользовательского вывода должно быть согласовано в соответствии требования web-сервера и CGI-интерфейса - иначе в процессе результата выполнения приложения обеспечивается получение ошибки HTTP 500 Кроме тог достаточно важным критерием обеспечения работоспособности является проверка кодовой таблицы представления передаваемой информации - поскольку в случае ее несопоставления с 7bit-ным ASCII-представлением при осуществлении вывода HTTP-заголовков производится появление ошибки HTTP 500
Указанная выше схема обеспечивает функционирование минимально-простого CGI-приложения - при условии обеспечения web-сервером правильного исполнения его компонентов при запросе пользователями целевого URL-адреса
Обеспечение работоспособности приложения с интерфейсом FastCGI представляет собой усложненную схему - включающую в себя протокол передачи информации между сеансом обработчика FastCGI-скрипта и web-сервером Полное описание соответствующей спецификации предоставлено на этом ресурсе http://fastcgi[dot]com/devkit/doc/fcgi-spec[dot]html

Использование в качестве обрабатывающего web-сервера приложения IIS предполагает включение активных сисетемных компонентов для проведения обработки - в частности такими элементами могут быть скомпилированные dll-модули обеспечивающие требуемое значение с прикладным интерфейсом IIS-сервера - или активные компоненты .net framework Одним из возможным вариантом обеспечения кастомизации настройки сервера IIS является следующая схема - для заданного виртуального хоста или директории обеспечивается создание такого конфигурационного файла web.config - который обеспечивает передачу управления .NET-программе компиляция которой может осуществляться в реальном времени посредством включения директривы codedom
CODE (text):
скопировать код в буфер обмена
  1. <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  2.         <providerOption name="CompilerVersion" value="v3.5" />
  3.         <providerOption name="WarnAsError" value="false" />
  4. </compiler>
  5.  
- и выбора параметров исполнения приложения с блоке runtime После осуществления указанный действий выполнение обработки пользовательских запросов - будет производиться средствами созданного приложения - которые может использовать классы рефлексии System.Web.Script.Services.Scrip tHandlerFactory и System.Web.Extensions управляющие схемой работы текущего компонента обработки пользовательских запросов В качестве возможного варианта возможно обеспечение загрузки данного приложеня в память в интервалами между осуществления пользовательских запросов - и использовать его для прямого или косвенного вызова целевого C++-приложения - подключение которого возможно также средствами совмещения управляемого и неуправляемого кода


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Администрирование Windows »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB