 |
|
|
24 сентября 2007 1:01
|
|
Тэги: perl, poe, многопоточность, событийная машина
|
Что такое событийная машина POE я кратко рассказывал в одной из предыдущих заметок.
Под сетевой многозадачностью будем понимать параллельную обработку входящих и/или исходящих сетевых соединений системными, либо прикладными приложениями.
Почему именно POE? Вопрос, конечно, требующий обоснования. Для начала рассмотрим какие вообще бывают способы обеспечения многозадачности. Я знаю три
- параллельные процессы
- событийные машины
- многопоточность
Рассмотрим эти способы подробнее
|
В закладки:
|
|
|
|
|
31 июля 2007 12:54
|
|
Тэги: Perl, POE
|
А по-русски, платформонезависимый фреймворк для создания многозадачных и сетевых приложений на Perl.
POE позволяет достаточно просто и быстро создавать многозадачные приложения, особо не задумываясь об управлении процессами и другими приятными вещами, с которыми приходится сталкиваться при желании написать многозадачное приложение. Всю эту нагрузку на себя берет POE, мы лишь описываем, что мы хотим делать. В большинстве случаев все приложение выполняется одним процессом, но при необходимости, POE умеет порождать дочерние процессы и общаться с ними.
Читать далее...
|
В закладки:
|
|
|
|
|
10 мая 2007 12:58
|
|
Тэги: Perl, POE
|
Вот блин...
Неожиданно наткнулся на одну проблемку.
При написании скрипта на Perl нашел то ли баг, то ли не знаю что в модуле POE::Component::Client::HTTP. Дело в том, что во время выполнения запроса при получении объекта HTTP::Response в заголовке запроса исчезают куки. Вернее не исчезают, а остается только последняя. В версии клиента 0.57 (именно она ставится при помощи модуля ppm) все было нормально, в версиях 0.79 и 0.80 (последняя на сегодня) этот "баг" был мной обнаружен. Сейчас буду изучать код в поисках истины.
Нашел.
Перебрал весь код POE::Component::Client::HTTP. А дело оказалось даже не в нем
Проблема в POE::Filter::HTTPHead строка 90.
$self->[WORK_RESPONSE]->header($1, $2);
Дело в том, что метод header добавляет заголовок в объект HTTP::Response, но если такой заголовок уже есть, он перезаписывается.
Рассмотрим след. заголовок:
HTTP/1.1 200 OK
Cache-Control: no-cache, pre-check=0, post-check=0
Connection: Close
Date: Mon, 22 Jan 2007 10:19:49 GMT
Pragma: no-cache
Server: Apache/2.0.53 (ASPLinux)
Content-Type: text/html; charset=WINDOWS-1251
Expires: 0
Set-Cookie: phpbb2mysql_data=a%3A0%3A%7B%7D; expires=Tue, 22 Jan 2008 10:19:49 GMT; path=/;
Set-Cookie: phpbb2mysql_sid=79cd66857632c3e75c16d0b8
4034a95a; path=/;
Set-Cookie: phpbb2mysql___lastvisit=1169461190; expires=Fri, 01 Jan 1971 00:00:00 GMT; path=/;
Set-Cookie: phpbb2mysql___f_all=0; path=/;
Set-Cookie: phpbb2mysql___f=a%3A0%3A%7B%7D; path=/;
Set-Cookie: phpbb2mysql___t=a%3A0%3A%7B%7D; path=/;
Set-Cookie: phpbb2mysql___uf=0; expires=Tue, 22 Jan 2008 10:19:50 GMT; path=/;
Set-Cookie: phpbb2mysql___u=a%3A0%3A%7B%7D; expires=Tue, 22 Jan 2008 10:19:50 GMT; path=/;
После обработки этим фильтром мы получим:
HTTP/1.1 200 OK
Cache-Control: no-cache, pre-check=0, post-check=0
Connection: Close
Date: Mon, 22 Jan 2007 10:19:49 GMT
Pragma: no-cache
Server: Apache/2.0.53 (ASPLinux)
Content-Type: text/html; charset=WINDOWS-1251
Expires: 0
Set-Cookie: phpbb2mysql___u=a%3A0%3A%7B%7D; expires=Tue, 22 Jan 2008 10:19:50 GMT; path=/;
Т.о. мы потеряли все куки кроме последней.
Исправляется данная проблема просто. В строке 90 вместо $self->[WORK_RESPONSE]->header($1, $2) пишем $self->[WORK_RESPONSE]->push_header($1, $2).
от 22.01.2007
|
В закладки:
|
|
|
|
|
7 апреля 2007 11:32
|
|
Тэги: perl, POE
|
Очень радуют разработчики данного сабжа.
Модуль POE::Kernel
if ($^O eq 'MSWin32') {
*{ __PACKAGE__ . '::RUNNING_IN_HELL' } = sub { 1 };
} else {
*{ __PACKAGE__ . '::RUNNING_IN_HELL' } = sub { 0 };
}
Модуль POE::Wheel::Run
if (POE::Kernel::RUNNING_IN_HELL) {
eval { require Win32::Console; };
if ($@) { die "Win32::Console failed to load:\n$@" }
else { Win32::Console->import(); };
eval { require Win32API::File; };
if ($@) { die "Win32API::File but failed to load:\n$@" }
else { Win32API::File->import( qw(FdGetOsFHandle) ); };
}
КЗТП
|
В закладки:
|
|
| |
|
|
|
 |
|
 |