Apache / php блокирует один файл для одновременной обработки с одного и того же клиента?
У меня все настроено и работает с KalturaCE & Drupak, и сервер (Ubuntu 8.02+Apache2+PHP5+MySql) работает нормально. Проблема, которую я здесь имею, не классифицирована.
Когда я играю вместе два видео со своего сайта, второе видео, которое я проиграл позже, не запускается, пока первое не завершит свою буферизацию. Я сделал несколько HTTP-наблюдений и узнал, что обе записи запрашивают файл с URL следующим образом:
/kalturace/p/1/sp/100/flvclipper/entry_id/xxxxxx/flavor/1/version/100000
поэтому первое видео, которое я проиграл, получает ответ 302 о перенаправлении на URL, как показано ниже:
/kalturace/p/1/sp/100/flvclipper/entry_id/xxxxxxx/flavor/1/version/100000/a.flv?novar=0
и начинает буферизацию и игру. В то время как второе видео, которое я начал позже, просто ждет ответа, пока первое видео не завершит свою буферизацию, а затем второе видео получает перенаправление 302 и начинает буферизацию
Мой вопрос: почему оба видео не могут одновременно буферизоваться? и, очевидно, это то, что мне нужно.
Ваша помощь весьма ожидаема и приветствуется.
4 ответа
Сеансы PHP на основе файлов будут блокировать файл сеанса, пока активен запрос. Если вы намереваетесь использовать параллельные запросы, подобные этому, вам нужно будет убедиться, что каждый скрипт закрывает сессию как можно скорее (т.е. после записи любых изменений) с session_write_close()
чтобы свести время блокировки к минимуму.
Я нашел решение своей проблемы, и он, конечно, был первым, кого предложил Марк, но это была и проблема с таймаутом mysql.
Поэтому размещение session_write_close() в обоих файлах в нужных местах решило мою проблему.
Для полного обзора, пожалуйста, посетите предложенную ветку по адресу http://www.kaltura.org/videos-not-playing-simultaneously-0
Я разместил несколько предложений на http://drupal.org/node/1002144 по тому же вопросу, это одно из них:
В пространстве Apache возможной причиной может быть MaxClients (или способность вашего сервера Apache отвечать на несколько запросов). Если этот параметр apache или емкость сервера невелики, то сервер может сбрасывать ваши соединения в свой резерв, пока не будет установлено первое соединение. Вы можете проверить это, используя обычные большие файлы, загрузка которых на сервер занимает некоторое время - это позволит определить, является ли KalturaCE или Apache причиной проблемы. Чтобы увидеть это, вам понадобится либо сайт, который уже находится на максимальном уровне для MaxClients (то есть не неиспользуемый сайт разработчика), либо очень низкий параметр MaxClients (например, 1!).
Еще одно предложение, опубликованное по адресу http://drupal.org/node/1002144 по тому же вопросу, -
Возможно, такое поведение может быть связано с блокировкой запроса mysql. Если SQL-запрос KalturaCE блокировал таблицу до тех пор, пока не завершится первый запрос (у меня нет оснований полагать, что это так, просто выявляются возможные причины), тогда второй запрос может зависнуть следующим образом.
Я не достаточно знаком с CE, чтобы предположить, что это так, но вы можете легко отладить, используя mtop на сервере во время запроса, чтобы увидеть, действительно ли это происходит.