Темы в PHP
Я создаю веб-приложение с помощью zend, здесь я создаю интерфейс, из которого пользователь-A может отправлять электронную почту нескольким пользователям (пользователям), и он отлично работает, но он замедляет время выполнения, из-за которого пользователь-ожидание слишком много для "подтвержденного ответа" (который будет отображаться после отправки сообщений электронной почты.)
В Java есть "Threads", с помощью которых мы можем выполнить эту задачу (отправлять сообщения электронной почты), и это не замедляет работу остальных приложений.
Есть ли какой-либо метод в PHP/Zend, как в Java, с помощью которого мы можем разделить наши задачи, которые могут занять много времени, например: отправка писем.
Спасибо..
Ответы
Ответ 1
EDIT (спасибо @Efazati, похоже, в этом направлении новая разработка)
http://php.net/manual/en/book.pthreads.php
Осторожно: (из здесь внизу):
pthreads был и есть эксперимент с довольно хорошими результатами. Любое из его ограничений или возможностей может измениться в любое время; [...]
/EDIT
В PHP нет потоков!
Обходной путь заключается в том, чтобы хранить задания в очереди (например, строки в таблице с электронными письмами) и иметь cronjob для вызова вашего php script с заданным интервалом (скажем, 2 минуты) и опросом для заданий. Когда заданные задания приносят несколько (в зависимости от тайм-аута установки php) и отправляют электронные письма.
Основная идея отложить выполнение:
- main script добавляет задания в очередь
- cron script отправляет их в крошечные фрагменты
Gotchas:
- убедитесь, что вы не отправляете электронное письмо без удаления из очереди (в худшем случае, если пользователь отменит спам с интервалом в 2 минуты)
- убедитесь, что вы не удаляете задание, не выполняя его сначала...
- обрабатывать отсканированную электронную почту с использованием алгоритма оценки
Ответ 2
Вы можете изучить несколько процессов, например fork. Общение между ними было бы не так просто, как с потоками (но тогда оно также не будет приходить со всеми его ловушками), но если вы просто отправляете электронные письма, может быть не нужно много общаться, если на все.
Ответ 3
Следите за тем, чтобы делать вилки в процессе Apache. Вы можете получить какое-то поведение, которого вы не ожидаете. Если вы хотите выполнить какое-либо асинхронное выполнение, это должно быть через какой-то механизм очередей. Гирмен - это один. Zend Server Job Queue - другая. У меня есть демо-код на Вы в очереди? Введение в очередь работы сервера Zend. Cron можно использовать, но у вас будет проблема в зависимости от вашего планировщика cron для запуска задач, тогда как асинхронные вычисления часто должны выполняться немедленно. Использование системы очередей позволяет сделать это без потоковой передачи.
Ответ 4
Существует расширение Threading, основанное на PThreads, которое выглядит многообещающим на https://github.com/krakjoe/pthreads
Ответ 5
Существует pcntl, что позволяет создавать подпроцессы, но php не работает очень хорошо для такого типа архитектура. Вероятно, вам лучше создать долговременный script (демон) и размножить их несколько.
Ответ 6
PHP не включает потоки как часть языка, есть некоторые методы, которые могут эмулировать его, но они не являются надежными.
Этот поиск Google показывает несколько возможных обходных путей
Ответ 7
С PHP в нем нет потоков. Однако для php вы можете взглянуть на этот круговой путь
http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html
Ответ 8
Возможно, вы захотите использовать систему очередей для отправки электронной почты и отправить электронное письмо из другой системы, которая поддерживает потоки. PHP - это просто инструмент, и вы должны использовать инструмент, который лучше всего подходит для работы.