ЗАВИХРИТЕСЬ как менеджер загрузок с многочисленными связями и дисплеем прогресса в PHP

Я, вероятно, создал бы адаптер типа для преобразования булевской переменной к интервалу существуют [приблизительно 110] примеры в пользовательском руководстве JAXB.

7
задан Ricardo Amaral 23 October 2009 в 14:41
поделиться

4 ответа

Функции curl_multi_xyz (), такие как curl_multi_exec () , позволяют обрабатывать несколько запросов одновременно. Также посмотрите CURLOPT_RANGE , если вы хотите загружать несколько сегментов одного и того же файла параллельно. А функции обратного вызова, которые вы можете установить с помощью CURLOPT_READFUNCTION и CURLOPT_WRITEFUNCTION , позволили бы вам отправлять некоторые данные о ходе выполнения клиенту.

0
ответ дан 7 December 2019 в 07:47
поделиться

Ко всем критикам «PHP не подходит для многозадачности»:

Сделайте шаг назад и подумайте, что в вашем распоряжении есть потрясающая структура многопоточности, если вы в среда LAMP. Используйте эту базовую архитектуру в своих интересах, т. Е. Apache является менеджером многопоточности, и в этом он чертовски хорош.

Настроить PHP для работы в этой среде очень просто.

  1. Задайте max_execution_time = 0, чтобы разрешить выполнение сценариев неограниченно.
  2. Установите ignore_user_abort = true, чтобы разрешить выполнение сценариев даже после клиент прервал

Разработка легких однозадачных веб-служб REST. Спроектируйте их таким образом, чтобы вам было все равно, когда они возвращаются, например, в системе типа очереди. Запись в очередь является потокобезопасной, а удаление из очереди - потокобезопасным, если выполняется с помощью некоторых основных мьютексов на уровне ОС.

«разветвление» веб-служб так же просто, как открытие файла:

fclose (fopen ("http: //somewebservice....php? a1 = v1 & a2 = v2 & ....")); // Запускаем веб-службу и продолжаем ...

Этот подход не только многопоточен, но и распределен по своей сути. Веб-сервис может быть локальным или расположен по всему миру. PHP определенно не заботится.

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

Слишком часто, когда разработчик думает «многопоточным», он думает: «Боже мой, мне нужно обрабатывать вилки и исполнители. и ждет и PID ». И если вы так спроектируете свою систему - вы правы, она очень быстро усложняется. Сделайте шаг назад и используйте то, что дано. У вас есть доступ к каталогам? Бум - у вас очереди. Вы можете звонить через Интернет? Бум - у вас есть многопоточное (распределенное) приложение. Теперь просто объедините концепции вместе, как диктует ваше приложение.

6
ответ дан 7 December 2019 в 07:47
поделиться

PHP не является многопоточным, и, если вы попытаетесь принудительно использовать его как таковой с помощью нескольких файловых вызовов или разветвления, результаты обычно неоптимальны. Я бы посоветовал против этого, ОДНАКО, можно было бы сделать что-то подобное с помощью сочетания js, php (вероятно, не curl, но пользовательского потока файлов php ) и long polling

1
ответ дан 7 December 2019 в 07:47
поделиться

Возможно, взгляните на curl_multi_init ();

0
ответ дан 7 December 2019 в 07:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: