Ajax многопоточный - PullRequest
       4

Ajax многопоточный

7 голосов
/ 26 мая 2010

Можно ли использовать ajax для достижения истинного многопоточного? если можно , как это сделать? пожалуйста, дайте мне некоторую связанную информацию, веб-сайт или книги. спасибо ~!

Ответы [ 2 ]

15 голосов
/ 26 мая 2010

Это зависит от того, что вы подразумеваете под "многопоточностью".

Код Javascript явно однопоточный.Никакой код Javascript не будет прерывать любой другой код Javascript, выполняемый в настоящее время на той же странице.AJAX (XHR) -запрос заставляет браузер что-то делать и (как правило) вызывает обратный вызов после его завершения.

На сервере каждый Ajax-запрос является отдельным HTTP-запросом.Каждый из них будет выполняться в своем собственном потоке.В зависимости от конфигурации веб-сервера они могут даже не выполняться на одном компьютере.Но каждый экземпляр PHP-скрипта будет полностью отдельным, даже если вызывать один и тот же скрипт.Общее состояние само по себе не существует.

Теперь браузеры обычно ограничивают количество одновременных запросов Ajax, которые страница может выполнить для каждого хоста.Это число обычно равно 2. Я думаю, вы можете изменить его, но, поскольку большинство людей будет иметь значение по умолчанию, вы должны предположить, что оно будет 2. Больше запросов будет помещено в очередь, пока существующий запрос не завершится.Это может привести к необходимости создавать раздражающие вещи, такие как создание нескольких имен хостов, таких как req1.example.com, req2.example.com и т. Д.

Единственным исключением являются сеансы, но они не являются многопоточными.Запуск сеанса заблокирует все другие сценарии, пытающиеся запустить точно такой же сеанс (на основе файла cookie).Это одна из причин, почему вам нужно минимизировать время, в течение которого сеанс открыт.Возможно, вы могли бы использовать базу данных или что-то вроде memcache для связи между сценариями, но это не совсем то, чем занимается PHP.

PHP лучше всего использовать для простой обработки запросов.Запрос получен.Он обрабатывается и ответ возвращается.Этим ответом может быть HTML, XML, текст, JSON или любой другой.Запрос может быть HTTP-запросом от браузера или AJAX-запросом.

Каждый из этих циклов запрос-ответ должен, по возможности, рассматриваться как отдельные объекты.

Другой используемый метод - длинный-polling.HTTP-запрос отправляется на сервер и может не возвращаться в течение длительного времени.Это используется для веб-чата и других сценариев типа «push-сервер».Иногда частичные ответы сбрасываются без завершения запроса.

Последний вариант (по крайней мере в Unix / Linux) заключается в том, что PHP может порождать процессы, но это не то, на что вы ссылаетесь.

Так что именно вы пытаетесь сделать?

3 голосов
/ 26 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...