На основании ответа @ chris-dolphin, но используя вспомогательную функцию:
// Creates svg element, returned as jQuery object
function $s(elem) {
return $(document.createElementNS('http://www.w3.org/2000/svg', elem));
}
var $svg = $s("svg");
var $circle = $s("circle").attr({...});
$svg.append($circle);
Вы можете запустить ваш php-скрипт из командной строки (т.е. bash), используя
nohup php myscript.php и
и
помещает ваш процесс в фоновое состояние.
Редактирование:
Да, есть некоторые недостатки, но их невозможно контролировать? Это просто неправильно.
Простой процесс убийства
остановит его. И это все еще лучшее и простое решение.
Если вы можете - возьмите копию расширенного программирования в среде Unix . Вся глава 13 посвящена программированию демона. Примеры находятся в C, но все необходимые вами функции имеют обертки в PHP (в основном PCNTL и POSIX расширений).
В нескольких словах - написание демона (это возможно только на основе OS-os-os - Windows использует Services) Похоже:
UMASK (0)
для предотвращения проблем разрешений Отказ Вилка ()
и иметь родительский выход. Setsid ()
.
(обычно это игнорируется или используется для сигнализации демона для перезагрузки его конфигурации) и SIGTERM
(чтобы сообщить процедуру изящного выхода).
Fork ()
снова и иметь родительский выход. CHDIR ()
. FCLOSE ()
stdin
, stdout
и STDERR
и не пишите им. Способ коррекции - перенаправить их либо / dev / null
или файл, но я не мог найти способ сделать это в PHP. Возможно, когда вы запускаете демон перенаправить их с помощью оболочки (вам придется выяснить, как это сделать, я не знаю :). Также, поскольку вы используете PHP, будьте осторожны для циклических ссылок, поскольку сборщик мусора PHP, до PHP 5.3, не имеет способа сбора этих ссылок, и процесс утечки памяти, пока она в конечном итоге не вылетает.
ASP.net запускается на сервере - он просто генерирует HTML (& JavaScript), который отправляется клиенту (например, браузеру) и визуализируется там.
Так что вам нужно не asp.net решение, а действительно богатое клиентское решение. Некоторые из ваших вариантов:
Я подозреваю, что Javascript или Silverlight будут представлять для вас наибольший интерес. Возможно, вы хотите провести небольшое расследование и вернуться с обновленным вопросом.
UPDATE Re: Bob's Comment:
Быстрый google обнаружил это, что кажется довольно классным:
Облегченные визуальные тезаурасы
-121--4244800-У меня была такая проблема, используя wget это было быстро (макс. 1 секунда), использование ЗАВИТОК заняло около 5 секунд, чтобы получить страницу, когда tcpdump-ing я обнаружил, что ЗАВИТОК пытается выполнить обратный поиск DNS, и если сервер не имеет зарегистрированного DNS-сервера revers, это замедлит работу, Я настроил обратный DNS на своем локальном DNS сервере, так что каждый запрос на этот сайт с использованием ЗАВИТОК теперь идет очень быстро. Я не нашел способ отключить DNS-поиск Revers из параметров настройки cURL.
Мое предположение состоит в том, чтобы отсканировать ваш трафик, чтобы увидеть, где он так долго ждет.
-121--3357877- Кевин ван Зонневелд написал очень хорошую подробную статью об этом , в своем примере он использует System _ Daemon
ГРУШ пакета (последняя дата релиза на 2009-09-02).
Есть не один способ решить эту проблему.
Я не знаю подробностей, но, возможно, есть и другой способ запустить PHP-процесс. Например, если вам нужен код для запуска на основе событий в базе данных SQL, вы можете настроить триггер для выполнения вашего скрипта. Это действительно легко сделать в PostgreSQL: http://www.postgresql.org/docs/current/static/external-pl.html .
Честно говоря, я думаю, что лучшим вариантом будет создание процесса Damon с помощью nohup. nohup позволяет команде продолжать выполнение даже после того, как пользователь выйдет из системы:
nohup php myscript.php &
Однако, существует очень серьезная проблема. Как вы сказали, менеджер памяти PHP - это полный мусор, он был построен с предположением, что скрипт выполняется всего несколько секунд, а затем существует. Ваш PHP скрипт начнет использовать GIGABYTES памяти всего через несколько дней. Вы ДОЛЖНЫ ВСЕГДА создать cron скрипт, который будет выполняться каждые 12 или, может быть, 24 часа, который убьет и перезапустит ваш php скрипт следующим образом:
killall -3 php
nohup php myscript.php &
Но что, если скрипт был в середине задания? Ну, kill -3 - это прерывание, это то же самое, что делать ctrl+c на CLI. Ваш php скрипт может перехватить это прерывание и изящно завершить работу, используя библиотеку PHP pcntl: http://php.oregonstate.edu/manual/en/function.pcntl-signal.php
Вот пример:
function clean_up() {
GLOBAL $lock;
mysql_close();
fclose($lock)
exit();
}
pcntl_signal(SIGINT, 'clean_up');
Идея $lock заключается в том, что PHP-скрипт может открыть файл с помощью fopen("file", "w");. Только один процесс может иметь блокировку записи в файл, поэтому, используя ее, вы можете быть уверены, что запущена только одна копия вашего PHP-скрипта.
Удачи!
Вы можете
NOHUP
Как предложил Хенрик.
и запустите программу PHP в качестве регулярного процесса внутри этого. Это дает вам больше контроля, чем использование NOHUP
. Я бы порекомендовал простейший метод (экран на мой взгляд), а затем, если вы хотите больше функций или функциональных возможностей, перейдите к более сложным методам.
Я запускаю большое количество демонов PHP.
Я согласен с вами, что PHP не является лучшим (или даже хорошим) языком для этого, но поделить код депозита, но демоны поделитесь кодом со компонентами, связанными с веб-сайтами, так что в целом это хорошее решение для нас.
Мы используем Daemontools для этого. Это умный, чистый и надежный. На самом деле мы используем его для запуска всех наших демонов.
Вы можете проверить это в http://cr.yp.to/daemontools.html .
Редактировать: быстрый список функций.