Использование приложений FastCGI из приложения C # - PullRequest
10 голосов
/ 21 января 2011

Я разрабатываю небольшой веб-сервер на C # в рамках более крупного проекта (характер проекта не позволяет мне использовать что-то вроде apache nginx, что было бы моим первым выбором).

Требуется веб-серверPHP для обработки некоторых запросов, которые он получает.

В данный момент я запускаю php как cgi, используя System.Diagnostics.Process и отправляя данные в и из.Это работает, но довольно медленно (по-видимому, из-за накладных расходов при запуске PHP с нуля, это главная проблема).Поэтому я хочу попробовать вместо этого использовать FastCGI.

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

Есть ли у кого-нибудь опыт в выполнении этого в.NET, или могли бы порекомендовать какие-нибудь полезные ресурсы для такого рода проектов?

Ответы [ 2 ]

2 голосов
/ 12 июля 2011

Я также должен был сделать нечто подобное (в течение переходного периода) и использовал MiniHttpd: библиотека веб-сервера HTTP .То, что я должен был сделать, немного отличалось, так как мне не нужен был httpd, а скорее был способ выполнения PHP из приложения C #.

Он в основном ссылается на неуправляемый код прямо из DLL, используя файл на диске (см. PhpAppDirectory.cs).

0 голосов
/ 17 июля 2011

Мне пришлось сделать то же самое, что действительно легко сделать,

Если вы просто запустите php-cgi exe с cmd и тестовым файлом php, вы увидите, что он выдает

C:\Program Files (x86)\PHP>php-cgi c:/xampp/php/test.php
X-Powered-By: PHP/5.3.6
location test.php
Content-type: text/html

relocated

Это мой пример, прежде всего вам нужно вызвать php-cgi и прочитать ответ

Первый двойной разрыв - это когда ваши заголовки останавливаются, и ваш вывод происходит, так что если вы выводите консоль впеременная EG public string phpOutput, тогда вам просто нужно регулярное выражение, чтобы разделить его на \ n \ n, но установите счетчик равным 1, чтобы он разделялся только при первом появлении \ n \ n,

EG

Regex.Split(phpOutput, "(\r\n){2,}|\n{2,}|\r{2,}", RegexOptions.ExplicitCapture);
...