Использование режима NPH в исполняемом CGI-файле EXE на IIS 7.0 - это может быть "в реальном времени"?

Я пишу прототип 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 обязательно должен сначала буферизовать и проанализировать его каким-либо образом?

0 ответов

Другие вопросы по тегам