Автор Тема: Конец работы скрипта на Perl  (Прочитано 6718 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн cooler.com.ua

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://chat.net.ua/
Конец работы скрипта на Perl
« : 01 Июня 2003, 16:28:15 »
Здравствуйте!

У меня к вам вот какой вопросик:

допустим есть такой скрипт (test.pl):

while (1) {
 syswrite(STDOUT, "test");
}

Запускаем его теперь вот таким образом: http://localhost/cgi-bin/test.pl

Потом я нажимаю в браузере кнопку "стоп". Так вот скрипт продолжает свою работу. Как мне сделать так, чтобы после нажатия кнопки "стоп" в браузере скрипт завершил свою работу. Заранее благодарен.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Конец работы скрипта на Perl
« Ответ #1 : 02 Июня 2003, 10:59:31 »
Никак. Скрипт выполняется на сервере а кнопка стоп на клиенте.
The documentations is your friend

Оффлайн NCRangeR

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 42
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.mephix.h1.ru
Конец работы скрипта на Perl
« Ответ #2 : 03 Июня 2003, 05:26:38 »
cooler.com.ua

Можно в выводимом окне сделать невидимый фрейм, который будет обращаться к скрипту isAlive.pl, который в свою очередь будет записывать время последнего обращения в файл.
Обращение будет происходить по пришествии каждой новой порции информации, можно, например, это сделать, заменив
syswrite (STDOUT, "test");
на
syswrite (STDOUT, "test");

test.pl в каждом цикле будет считывать время последнего обращения, и если, предположим, уже 20 секунд не было обращений, делать exit (0);

Надеюсь, что несмотря на возможные ошибки, в принципе идея ясна ;)
- How does the CPAN work?
 - With dark magic, evil-looking sacrificial knives and scantily clad virgins under pale moonlight.

Оффлайн cooler.com.ua

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://chat.net.ua/
Конец работы скрипта на Perl
« Ответ #3 : 03 Июня 2003, 08:51:15 »
2 NeoNox:

Вообщем на PHP как-то это реализова но же ... Там если теряется связь с клиентом то скрипт автоматом прекращает свою работу, мало того, есть возможность зарегистрировать ф-цую, которая будет выполняться именно тогда, когда завершит связь клиент.

Оффлайн cooler.com.ua

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://chat.net.ua/
Конец работы скрипта на Perl
« Ответ #4 : 03 Июня 2003, 08:54:18 »
2 NCRangeR:

Спасибо большое за предложение, но это как-то геморойно ... хотелось бы какую-то функцию, которая проверяет не отключился ли клиент.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Конец работы скрипта на Perl
« Ответ #5 : 03 Июня 2003, 11:17:40 »
Цитировать
cooler.com.ua:
Вообщем на PHP как-то это реализова но же

Не верю. Потому как скрипт на сервере а кнопка на клиенте.
Все сделано одним из вариантов похожим на вариант NCRangeR.
Цитировать
cooler.com.ua:
хотелось бы какую-то функцию, которая проверяет не отключился ли клиент.

Куда отключился? Из сети?
Тогда perldoc Net::Ping
Или закрыл текущее окно?
perldoc Is::My::Window::Not::Closed ;)
The documentations is your friend

Оффлайн cooler.com.ua

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://chat.net.ua/
Конец работы скрипта на Perl
« Ответ #6 : 03 Июня 2003, 11:33:00 »
2 NeoNox:

Да что тут непонятного ... когда клиен обращаетсмя но адесу http://chat.net.ua/index.php то апач обрабатывает это запрос с помощью ПХП. Когда клиент отключается от скрипта или как тебе еще объяснить (перестает получать данные от скрипта) то апач говорит PHP "кончай работать :)" и скрипт PHP завершает работу в какой бы стадии выплнения он не находился. Понимаешь? А перловый скрипт не завершается а висит в памяти. Вот.

Понимаешь в чем вопрос?

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Конец работы скрипта на Perl
« Ответ #7 : 03 Июня 2003, 11:55:58 »
NeoNox
cooler.com.ua

с одной стороны мне кажется, что это чушь - про разъединения, апач и PHP. А вот с другой - и правда, что именно происходит при разрыве соединения с клиентом?
Это же не UDP, а TCP/IP, и устанавливается, насколько я понимаю, виртуальный канал между клиентом и сервером. А его разрыв отследить можно...
•••Jah\'d never let us down!•••

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Конец работы скрипта на Perl
« Ответ #8 : 03 Июня 2003, 12:14:59 »
Цитировать
cooler.com.ua:
скрипт PHP завершает работу в какой бы стадии выплнения он не находился. Понимаешь?

Я то понимаю а вот ты нет.
Почитай ПХП на танке http://faq.phpclub.net/na_tanke
раздел "Отличие веб-приложения от обычной программы"
[OFF]надо такой и в perl создать...[/OFF]
Что там видим?
Цитировать
Сервер и браузер общаются, посылая друг другу запросы по особому протоколу - HTTP. Соединение может инициировать только браузер. Он посылает серверу запрос - показать такой-то файл. Сервер клиенту файл посылает.
Только так и происходит. Клиент запросил - сервер отдал. И забыл сразу о клиенте. Остюда становится понятным ответ на вопрос, можно ли точно узнать, сколько юзеров сечас на сайте. Нельзя. потому, что "на сайте" нету ни одного. Они соединяются, запрашивают страницу, и отсоединяются. Не имеют постоянного оединения с сервером, как, например, игроки в Кваку. Узнать можно только примерно, записывая время каждого соединения и выбирая записи за определенный промежуток времени.

Доступно?
А теперь задавай свой конкретный вопрос.
The documentations is your friend

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Конец работы скрипта на Perl
« Ответ #9 : 03 Июня 2003, 12:25:05 »
пхп (AFAIK) может определить разорвано ли соединение только при попытке послать что-то клиенту.
То есть (для тех кто не понял), если в скрипте происходят какие-то вычиления без вывода клиенту, он (скрипт) не может определить на связи ли клиент, но если скрипт попытется послать клиенту какой-то HTTP-заголовок или текст, вот тут ПХП и может определить, разорвано ли соединение.

Вобщем-то ведь ничто не мешает скрипту посылть какой-то левый ХТТП-заголовок (как кстати делают некоторые скрипты) и если этот ХТТП-заголовок нормально шлется, значит соединение не разорвано
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Конец работы скрипта на Perl
« Ответ #10 : 03 Июня 2003, 12:36:35 »
Цитировать
Макс:
Вобщем-то ведь ничто не мешает скрипту посылть какой-то левый ХТТП-заголовок (как кстати делают некоторые скрипты) и если этот ХТТП-заголовок нормально шлется, значит соединение не разорвано

Перечитай еще раз... Сервер то может послать.
Но броузер ничего не пошлет на сервер без юзера. (скрипт видит что у пользователя истек таймаут на время последнего запроса и нужно его убрать из списка кто онлайн)
Выход -  пингануть, но где гарантия что у пользователя вообще броузер запущен? Это все теория...
В следующий раз отправлю читать RFC ;)
The documentations is your friend

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Конец работы скрипта на Perl
« Ответ #11 : 03 Июня 2003, 12:46:27 »
NeoNox
а если так: скрипт что-то длинное выводит, и в этот момент юзер закрывает браузер или жмет stop. Что происходит?
•••Jah\'d never let us down!•••

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Конец работы скрипта на Perl
« Ответ #12 : 03 Июня 2003, 13:07:53 »
NeoNox
ИМХО скрипт онлайн-пользователей к данному вопросу не имеет значение. Xander уже описал проблему:
Цитировать
скрипт что-то длинное выводит, и в этот момент юзер закрывает браузер или жмет stop. Что происходит?
и я так понимаю, автора темы интересует, как отследить момент разрыва соединения. В php эта фича присутствует и мне не верится, что в перл нет такой возможности
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Конец работы скрипта на Perl
« Ответ #13 : 03 Июня 2003, 13:10:34 »
Xander вопрос видел?
#!/usr/bin/perl
use CGI qw(:standard);
print header;

print "Test \\n";

open(OUT, ">./test");
while (1) {
print OUT "=====  Begin  =====\\n";
}
print OUT "====== End ======\\n";
close OUT;

Сколько нужно раз нажать на кнопку "стоп"?
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Конец работы скрипта на Perl
« Ответ #14 : 03 Июня 2003, 13:11:46 »
Макс
Дай мне эту фичу в PHP. Я обещаю ее досконально изучить.
The documentations is your friend

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28