![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
сопрягаю два сервака. первый кидает запрос (урл) на второй, второй выполняет скрипт и отдаёт результат.
скрипт на втором серваке должен ещё выполнить ряд процедур (в данном случае, это залезть в базу, вычитать сохранённые не отправленные сообщения, отправить их и так далее). а эта процедура занимает какое-то время, хотя первому серваку, уже как-то не резон ждать его. есть ли возможность после отправки результата на вывод, отправить какой-нибудь заголовок завершения, а самому продолжить выполнение задачи? |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
bars80080, а чем не устраивают задачи по крону? Устройте очередь обработки.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
не, тут фишка в том, что всё равно это надо сделать. не через какой-то промежуток времени, а желательно сразу.
неужели придётся дополнительно записывать в планировщик дополнительное время срабатывания скрипта, через секунду? это мягко говоря через одно место |
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Я вижу 3 способа для решения этой задачи.
Простой способ, путем отправки контента и заголовка Connection: close http://ru.php.net/manual/en/function.regis...ction.php#92959 Минус этого варианта в том, что не все браузеры будут корректно отрабатывать такую ситуацию. При использовании PHP FPM, есть еще более простой способ и при этом полностью кроссбраузерный. http://php-fpm.org/wiki/Features#fastcgi_f...h_request.28.29 Соответственно минус такого метода, это обязательное наличие менеджера процессов PHP FPM И последний наиболее сложный, это написать демона (можно и на PHP) который будет обрабатывать задачи в background'е. |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: -1 Всего: 17 |
bars80080, обычный fork? чтобы часть вашей процедуры "процедура занимает какое-то время," запустить в другом не завсимом процессе...
как-то так примерно:
Это сообщение отредактировал(а) gcc - 27.2.2010, 23:16 |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
не знаю, что такое "обычный форк". можно подробнее или ссылочку?
ну, ответа завершения ждёт не браузер, а сервер. я предположил, что он всё же понимает о том, что произошёл конец передачи за счёт какого-то передаваемого кодового слова. вроде как EOF. как я понимаю, эту команду отдаёт сам сервер. а вот отдать её принудительно с помощью пхп? демон, имхо, тот же крон, только в профиль. то есть овчинка выделки не стоит. менеджер процессов php fpm - покопаю, что там есть на серваке, но не думаю, что там дадут разойтись руке скриптующего. а вот connection close обязательно попробую |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: -1 Всего: 17 |
||||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Да, можно использовать fork. Несколько дорогое решение, но с поставленной задачей полностью справится.
|
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: -1 Всего: 17 |
fork действительно будет новые процессы создавать, возможно лишние, можно сделать клиент-сервер на сокетах или на IPC лучше будет (как писали выше), из скрипта php передавать на сервер и выполнять... если в этой задачи подойдет...
Это сообщение отредактировал(а) gcc - 28.2.2010, 00:39 |
|||
|
||||
| IgorIV |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 7.9.2009 Репутация: 2 Всего: 8 |
Получается что при форке создается 3 процесса, один родительский, второй - дочерний - быстро что-то прочитал - отдал - завершился, третий - дочерний - лезет в базу, считает, отправляет, завершается. Теперь и родительский завершается. 3 процесса вместо 1.
Хотел пересобрать php, попробовать, а pcntl только для cli (по крайней мере так сказал make config) |
|||
|
||||
| IgorIV |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 7.9.2009 Репутация: 2 Всего: 8 |
bars80080, тут вот такая штука есть - http://www.php.net/manual/en/book.gearman.php - вроде как по теме. Но я её ещё не пробовал. Буду рад если кто выскажется.
|
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |