Использование режима NPH в исполняемом EXE CGI на IIS 7.0 - это может быть "в реальном времени"? - PullRequest
0 голосов
/ 17 июля 2011

Я пишу прототип CGI-приложения для запуска на сервере IIS 7.0, что в конечном итоге приведет к тому, что это приложение отправит несколько фрагментированных http-ответов, сгенерированных в ответ на запрос, который может занять некоторое время для создания фактических данных. .

Прежде чем углубляться в эту сторону вещей (т. Е. Генерировать реальные данные), я хотел проверить, действительно ли мое приложение cgi работает в режиме непроверенного заголовка (т.е. само приложение cgi генерирует все заголовки, а IIS просто возвращает все вывод в запрашивающий http браузер / агент.

поэтому я написал простое приложение, которое возвращает следующее (обратите внимание на временные метки - между каждой строкой с временной меткой стоит пауза в 1 секунду, и, как следует из текста, для ее выполнения требуется чуть более 10 секунд - фактически вы можете запустить cgi приложение в командной строке и соблюдайте это время.

HTTP/1.1 200 OK
Date: Sun, 17 Jul 2011 09:07:47 GMT
Content-Type: text/plain
Transfer-Encoding: chunked

17;
NPH CGI Chunked Example

4D;
the fat cat sat on the mat, perplexed at the antics of the quick brown fox.

2D;
counting ... 1...  the time is now 09:07:48

2D;
counting ... 2...  the time is now 09:07:49

2D;
counting ... 3...  the time is now 09:07:50

2D;
counting ... 4...  the time is now 09:07:50

2D;
counting ... 5...  the time is now 09:07:51

2D;
counting ... 6...  the time is now 09:07:52

2D;
counting ... 7...  the time is now 09:07:53

2D;
counting ... 8...  the time is now 09:07:54

2D;
counting ... 9...  the time is now 09:07:55

2E;
counting ... 10...  the time is now 09:07:56

18;
NPH Chunked Example Ends

0

Когда я устанавливаю исполняемый файл на сервер и открываю его в Internet Explorer, отображается ожидаемый текст (время различается, поскольку я запускал их в разное время дня и в разных часовых поясах):

NPH CGI Chunked Example
the fat cat sat on the mat, perplexed at the antics of the quick brown fox.
counting ... 1...  the time is now 16:14:58
counting ... 2...  the time is now 16:14:59
counting ... 3...  the time is now 16:15:00
counting ... 4...  the time is now 16:15:01
counting ... 5...  the time is now 16:15:02
counting ... 6...  the time is now 16:15:03
counting ... 7...  the time is now 16:15:04
counting ... 8...  the time is now 16:15:05
counting ... 9...  the time is now 16:15:06
counting ... 10...  the time is now 16:15:07
NPH Chunked Example Ends

ОДНАКО - ничего не отображается, пока не пройдут все 10 секунд. (примечание - тот же результат в Chrome)

, чтобы убедиться, что я создал запрос http в текстовом редакторе, вставил его в telnet на порту 80 на сервер и наблюдал 10-секундный разрыв перед полным ответом, как показано выше.

Я получаю один и тот же результат, независимо от того, имеет ли исполняемый файл префикс «nph-» или нет - я выполнил один и тот же тест в telnet, используя «nph-hello.exe», «nphhello.exe» и «hello». exe ", используя следующее:

(примечание: идентифицирующие адреса корректируются для этого поста)

GET /cgi-bin/nph-hello.exe HTTP/1.0
Host: www.myserver.com:80
From: someone@gmail.com
User-Agent: telnet/1.0

(для актуальности префикса именования exe прочитайте примечания в http://support.microsoft.com/default.aspx?scid=kb;EN-US;q176113 в разделе "Разрешение" начало "в качестве обходного пути ...")

Похоже, я не наблюдаю какой-либо заметной разницы в выходных данных в telnet, связанной с префиксом имени exe, что заставляет меня полагать, что эта информация либо устарела, либо что-то еще нужно включить, чтобы включить эту функцию, которая явно должно произойти до запуска приложения cgi - что объясняет, почему используется префикс, а не то, что делает само приложение - т.е. IIS должен знать, дождаться ли ответа)

пока на поверхности он достигает желаемого результата - данные находят путь к запрашивающему http-агенту - я бы предпочел, чтобы это происходило в режиме реального времени, поэтому обновления прогресса могут отображаться по мере выполнения запроса.

поэтому мои вопросы:

1) есть ли какие-то настройки, которые необходимо выполнить, чтобы включить NPH (или правильный префикс?)

2) Есть ли какой-нибудь тест, который приложение cgi может выполнить, чтобы определить, действительно ли оно находится в режиме NPH?

3) предполагается ли, что stddout (то есть данные ответа) будет передан запрашивающему агенту в реальном времени, или IIS обязательно должен сначала буферизовать и проанализировать его каким-либо образом?

...