Squeak.ru - шаблоны программирования

Apache + PHP несколько скриптов одновременно

Добрый день.

Во-первых, извините за мой плохой английский =)

Так. Я создал скрипт:

<?
sleep(10);
?>

У моего Apache есть модуль MPM, я, очевидно, не использовал сеансы в этом скрипте, просто… просто сон(10). Когда я открываю 2 вкладки в браузере одновременно, первая вкладка загружается за 10 секунд, вторая за 20 секунд.

Но. Когда я открываю этот скрипт в двух разных браузерах одновременно, он загружается в каждом из них через 10 секунд.

Итак, я начал думать, что моя проблема в "Connection: Keep-Alive". Я изменил свой сценарий:

<?
  header('Connection: close');
  phpinfo();
  sleep(10);
?>

phpinfo() - чтобы убедиться, что заголовки были отправлены до sleep(). Буууут... Столкнулся с той же проблемой. На первой вкладке Chrome я получаю заголовки с надписью «Соединение: закрыть», на второй вкладке я не могу получить заголовки ответа, пока первый скрипт не завершен. В двух разных браузерах - все нормально.

И теперь я совершенно не понимаю, что я делаю не так. Почему Chrome не может сделать 2 параллельных запроса на мой сайт? Что я должен сделать, чтобы решить эту проблему?

P.S. Я не хочу отключать поддержку активности для всех своих сайтов. Я не против, если это ускорит загрузку css, изображений и прочего. Даже другие скрипты. Но я хочу иметь возможность запускать несколько скриптов параллельно в одном браузере. П.П.С. Например: на одной странице будет очень длинный ajax-запрос, например - обработка больших данных на стороне сервера и ajax-запросы с небольшим интервалом - для получения статуса выполнения первого запроса. Очевидно, что они должны быть параллельны.


  • stackoverflow.com/ вопросы/12101082/ 08.03.2013
  • Я предполагаю, что это были ваши настройки apache, взгляните на настройки для KeepAliveTimeout и MaxKeepAliveRequests 08.03.2013
  • @HankyPankyㇱ спасибо, но это не совсем то, чего я хочу. Я знаю о cron, но не хочу использовать его прямо здесь =) Если я не найду другого решения - придется использовать cron =( 08.03.2013
  • @prodigitalson спасибо. Я попытался отключить KeepAlive для всех своих сайтов. И с помощью WebKit Inspector я вижу, что Chrome действительно получает заголовок Connection: close, но проблема не решается - Chrome не устанавливает НОВОЕ подключение к сайту, при этом он не загружает страницу с заголовком Connection: close. Может быть, в механизме ajax есть способ сказать, что этот ajax-запрос должен быть в новом соединении? 08.03.2013
  • Я думаю, было бы интересно, если бы вы добавили туда несколько инструкций по ведению журнала. 09.03.2013
  • Старый вопрос, но я также повторяю его в Chrome и Apache 2.2.22. Даже если KeepAlive Off, вторая вкладка в Chrome не будет завершена, пока не будет сделана первая вкладка. Я замечаю это, когда выполняю довольно долгий процесс, а затем пытаюсь открыть страницу на том же сайте. Аналогичная проблема, но у меня не работает даже с уникальными запросами. stackoverflow .com/questions/27513994/ 24.09.2015

Ответы:


1

Я знаю, что это старый вопрос, но у меня была такая же проблема, и я решил ее с помощью session_write_close()! Без этого PHP намеренно ставит скрипты в очередь для одного и того же сеанса.

Самый простой пример:

Сценарий Looong #1:

<?php

$_SESSION['progress'] = 0;

for ($i=0; $i < 100; $i++)
{
    session_start();
    $_SESSION['progress']++;
    session_write_close();
    sleep(1);// This is slowing script purposely!
}

?>

Короткий сценарий №2:

<?php
session_start();
print_r($_SESSION['progress']);
?>

Теперь попробуйте, откройте первый скрипт, который занимает целую вечность, откройте второй скрипт в новой вкладке и обновите прогресс в мгновение ока, пока первый все еще работает! Так легко, правда?! ;)

Тот же принцип для длинного сценария опроса ajax и второго вызова ajax для получения прогресса!

12.07.2016
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...