Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос по POE 
:(
    Опции темы
nitr
Дата 1.4.2007, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Ramirez, отличное предложение smile , только чтобы следили, а то тут много топиков "загадили"...

Добавлено через 36 секунд
я имел те, что вынесли как подфорум или подраздел...


--------------------
PM   Вверх
shamber
Дата 1.4.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Я тоже поддерживаю данное предложение. Потому как, мне кажется, уже много людей на этом форуме пытаются с poe работать. Это позволило бы обощить опыт smile
PM MAIL Jabber   Вверх
Ramirez
Дата 1.4.2007, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 4
Всего: 5



Может попробовать перевести совместно документацию? И дополнить ее своими примерами/опытом.. Если, конечно, желающие есть? Можно было-бы завести Wiki например...

Цитата(Nab @  2.3.2007,  23:47 Найти цитируемый пост)
А вообщето это  фраймворк реализующий невытесняющую многозадачность основанную на событийной модели.


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

Это сообщение отредактировал(а) Ramirez - 2.4.2007, 01:42
PM ICQ   Вверх
Nab
Дата 2.4.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 26
Всего: 37



Цитата(Ramirez @  1.4.2007,  23:02 Найти цитируемый пост)
Если я правильно понимаю, то POE в данном случае выполняет роль диспетчера процессов. В вытесняющей многозадачности диспетчер может сам снять процесс по истечении отведенного ему времени. В невытесняющей модели, диспетчер процессов сам не может этого сделать, поэтому процессы сами должны возвращать ему управление как можно чаще, а он только собирает очередь и решает какой процесс вызвать следующим. Практически, это сводится к тому, что мы должны свести к минимуму использование циклов внутри процессов, а все циклы разбить на последовательные вызовы. Да и вообще, почти все вызовы делать через ядро POE. Поправьте меня, если я что-то путаю...
 
Вот именно....
Очень хорошо поняли и изложили smile



--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
G0rinich
Дата 4.4.2007, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 21.8.2006

Репутация: нет
Всего: 1



Самое зло - это использовать sleep в POE )))
PM MAIL   Вверх
stan777
Дата 4.4.2007, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



Цитата(G0rinich @ 4.4.2007,  15:45)
Самое зло - это использовать sleep в POE )))

А что быстрей РОЕ, форки или треды ? ну все естественно на Unix, я так понимаю алгорит паука вездет тотже без цикла типа for(@url){..}  ?
PM MAIL   Вверх
Nab
Дата 5.4.2007, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 26
Всего: 37



Цитата(stan777 @  4.4.2007,  23:35 Найти цитируемый пост)
А что быстрей РОЕ, форки или треды ? ну все естественно на Unix, я так понимаю алгорит паука вездет тотже без цикла типа for(@url){..}  ?

А эт зависит от того что иммется ввиду по словом "быстрее" smile
Быстрее написать на POE если его конечно знаешь... 
А вот работает у меня быстрее всего на форках, хотя треды я еще не пробовал, но говорят под никсами, они реализованы не лучшим образом :(

Добавлено через 5 минут и 44 секунды
Но я пока POE знаю не очень, но всеже склоняюсь именно к нему, и на нем буду делать все, на форках сложнее, особенно межпроцесовое общение... А POE хорош тем что  имеет компонентную архитектуру, и если делать все по правилам, то наращивать функционал будет много проще...


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
G0rinich
Дата 5.4.2007, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 21.8.2006

Репутация: нет
Всего: 1



POE сам умеет форкаться когда надо. Вернее в нем есть какой-то механизм форков, но я всегда наблюдал только один процесс.
От форков я отказался. Вернее от того, что там в перле под именем FORK живет. Так как вообще не понял как оно работает ))) Слабоват я тогда был в никсах, а теперь не кайф про это вспоминать ))) Уж лучше руками запустить несколько раз один скрипт, предварительно научив копии не мешать друг другу.
PM MAIL   Вверх
Ramirez
Дата 5.4.2007, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 4
Всего: 5



я тут пробовал POE::Component::EasyDBI неблокирующий доступ к базе реализует, так вот он висит отдельным процессом в системе...

Вот, кстати есть такой вопрос. Вот код для примера:
Код

POE::Component::Server::TCP->new(
...
ClientConnected    => \&client_connect,
ClientInput        => \&client_input,
...
);

# -------------------------------------------------------------------
sub client_connect {
    my ( $heap, $message ) = @_[ HEAP, ARG0 ];
    my $session_id = $_[SESSION]->ID;
    $_[KERNEL]->delay('shutdown', 5); # wait 5 secs for auth
}

# -------------------------------------------------------------------
sub client_input {
    my ( $heap, $input ) = @_[ HEAP, ARG0 ];
    $_[KERNEL]->yield( "shutdown" ) if $input eq "exit"; # handle exit
    $_[KERNEL]->delay('shutdown') if $input eq "auth"; # cancel auto-disconnect
    ....
    другие события
}


при подключении клиента, в процедуре client_connect ставится задержка 5 секунд, по истечении которых сессия закрывается.
в процедуре client_input проверяем ввод клиента, и например, если введено слово "auth" отменяем запланированное закрытие сессии.

Так вот бывают ситуации, коннект плохой например, когда в очередь уже встали другие события для этой сессии (через yield), но перед ними стоит событие shutdown, оно естественно происходит, закрывает сессию, а потом приходят следующие события, сессии такой уже нет, и скрипт вываливается :( Мне казалось что POE должен сам такие ситуации корректно обрабатывать. Видимо где-то я логику не улавливаю...

Это сообщение отредактировал(а) Ramirez - 5.4.2007, 09:33
PM ICQ   Вверх
shamber
Дата 5.4.2007, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Так ты же сделай просто $heap->flag. проверяй его и если он не выставлен например, то функция отрабатывает, а если выставлен то выход. Я так подобные систуации разруливал smile а в POE как мне показалось такой проверки нет.
PM MAIL Jabber   Вверх
stan777
Дата 5.4.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



Цитата(Nab @ 5.4.2007,  01:00)
Цитата(stan777 @  4.4.2007,  23:35 Найти цитируемый пост)
А что быстрей РОЕ, форки или треды ? ну все естественно на Unix, я так понимаю алгорит паука вездет тотже без цикла типа for(@url){..}  ?

А эт зависит от того что иммется ввиду по словом "быстрее" smile
Быстрее написать на POE если его конечно знаешь... 
А вот работает у меня быстрее всего на форках, хотя треды я еще не пробовал, но говорят под никсами, они реализованы не лучшим образом :(

Добавлено @ 01:05
Но я пока POE знаю не очень, но всеже склоняюсь именно к нему, и на нем буду делать все, на форках сложнее, особенно межпроцесовое общение... А POE хорош тем что  имеет компонентную архитектуру, и если делать все по правилам, то наращивать функционал будет много проще...

Я так понял что тут обсуждается таже проблема велосипеда, то есть паука. Да на форках   я тоже хочу написать, вот только как разберусь с IPC::Shareable, мне кажется это быстрей чем через pipe()'ы, хотя риализации, ни на расшареной памяти ни на пайпах у меня нет, хотя вот на тредах работает вроде нормально, это лучший вариант который я имею на сегодняшний день, хотя жрет много памяти 70 тредов 250 мегов, это на FreeBSD 6.1.

Это сообщение отредактировал(а) stan777 - 5.4.2007, 18:06
PM MAIL   Вверх
Ramirez
Дата 16.4.2007, 04:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 4
Всего: 5



Цитата(shamber @  5.4.2007,  11:22 Найти цитируемый пост)
Так ты же сделай просто $heap->flag. проверяй его и если он не выставлен например, то функция отрабатывает, а если выставлен то выход. Я так подобные систуации разруливал smile а в POE как мне показалось такой проверки нет. 


Нашел кажется smile до use POE надо сказать 

Код

sub POE::Kernel::ASSERT_DEFAULT () { 1 } 


тогда, включится куча проверок (как написано в мане) и в том числе:
Код

ASSERT_EVENTS enables checks for dispatching events to nonexistent sessions.


Вроде помогло....

Это сообщение отредактировал(а) Ramirez - 16.4.2007, 04:22
PM ICQ   Вверх
nagual2
Дата 16.6.2009, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



Прошло 2 года а пациент все там же ...
Кто то решил данную проблему?
PM MAIL   Вверх
Ramirez
Дата 16.6.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 4
Всего: 5



Какую именно? G0rinich привел в треде наиболее академичный пример решения проблемы. 
Nab - наиболее простой для понимания, но с некоторыми нюансами.

Это сообщение отредактировал(а) Ramirez - 16.6.2009, 08:59
PM ICQ   Вверх
nagual2
Дата 17.6.2009, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



Цитата(Ramirez @ 16.6.2009,  08:59)
Какую именно? G0rinich привел в треде наиболее академичный пример решения проблемы. 
Nab - наиболее простой для понимания, но с некоторыми нюансами.

А как приведенные варианты будут работать с 
Код
use POE 0.34;
use POE::XS::Queue::Array;

PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0919 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.