Использовать асинхронный длинный опрос? - PullRequest
0 голосов
/ 11 мая 2011

У меня есть приложение на основе Zend, которое использует длинный опрос.По сути, он делает HTTP-запрос POST, который блокирует приложение до тех пор, пока оно не вернется или не завершит работу через 20 секунд.

Мне нужно сделать второй запрос (который в настоящее время не является параллельным), где, к сожалению, еслипервый запрос зависает, он заканчивается за 20 секунд (= тайм-аут) до выполнения второго запроса.

Каков наилучший способ сделать мое приложение асинхронным или, по крайней мере, сделать неблокирующий HTTP-запрос I/ O

Ответы [ 2 ]

2 голосов
/ 14 июня 2011

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

Так что, если вам не нужен сеанс в длинном опросе, не запускайте его и не закрывайте его (вызывайте session_write_close ()) до того, как код, который выполняется в течение 20 с в вашем случае (т. Е. Перед основной итерацией в длинном опросе).

Надеюсь, это поможет.

1 голос
/ 11 мая 2011

М-м-м-м, может быть, вам стоит добавить больше информации к вашим вопросам.Если 2 запроса не связаны (т. Е. Второй не требует завершения первого), вы можете выполнить несколько запросов, не дожидаясь завершения первого.Но, конечно, вы не можете сделать это без некоторого Javascript.

Например, вы можете использовать функцию jQuery ajax в асинхронном режиме (по умолчанию это асинхронный).Вы можете связать несколько вызовов ajax в jQuery, второй не будет ждать окончания первого (но будьте осторожны с настройками тайм-аута ajax).

...