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

Поиск:

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


Новичок



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

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



Паука я уже сделал ... там еще патчик есть на poe 
http://groups.google.com/group/perl.poe/br...Cf9263fef5314ea

Еще я хотел fcgi приложение написать на poe но там другая проблема
http://forum.sysfaq.ru/index.php?showtopic...mp;#entry385670
Я писал разработчику 
Код

Hi,

I'm afraid I've kind of left that code for a long time.. Can you try the latest from git (http://code.d.cx/?p=POE-Component-FastCGI.git;a=summary,
git clone git://code.d.cx/POE-Component-FastCGI.git).

I think there's some fixes in there I hadn't got around to releasing..

David

On Tue, Jun 09, 2009 at 12:01:09AM +0300, [email protected] wrote:
> Hi
> ______________________________________________________________________
> ______
> _______
> #!/usr/bin/perl -w
> use strict;

> use HTTP::Request;
> use HTTP::Response;
> use POE::Component::FastCGI;
> POE::Component::FastCGI->new(
>     Address             => '/mnt/md0/test.sock',
>     Unix                => 1,
>     Handlers    => [
>         [ '/' => \&default ],
>         [ '' => \&default ],
>     ],
>     );
> system("chmod 777 /mnt/md0/test.sock"); POE::Kernel->run();

> print "\nAll done\n";
> exit 0;
> sub default {
>     my (    $request )    = @_;
>     my    $response    = $request->make_response;
>     my    $content    = join( "\n",
>         qq{<!DOCTYPE html\n\tPUBLIC "-//W3C//DTD XHTML 1.0 
> Transitional//EN"\n\t 
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>}, qq{<html 
> xmlns="http://www.w3.org/1999/xhtml"; lang="en-US" xml:lang="en-US">},
>         qq{<head>},
>         qq{<title>Fast CGI Rocks</title>},
>         qq{<meta http-equiv="Content-Type" content="text/html; 
> charset=windows-1251" />},
>         qq{</head>},
>         qq{<body>},
>         qq{<h1>Fast CGI Rocks</h1>Invocation number <b>$COUNTER</b> 
> PID <b>$$</b>.<hr />},
>         '',
>         qq{</body>},
>         qq{</html>},
>         ''
>     );
>     print STDERR "Accept request accept\n";
>     $response->header(
>         "Content-type"        => "text/html; charset=windows-1251",
>         "Content-Length"    => length( $content ),
>     );
>     $response->content( $content );
>     $response->send;
>     $COUNTER++;
>      print STDERR "Response sent\n";
> }
> ______________________________________________________________________
> _
> Nginx.conf
>                 location / {
>                     set $path_info $fastcgi_script_name;
>                     set $real_script_name $fastcgi_script_name;
>                     if ($fastcgi_script_name ~ "(.+?.pl)(/.+)$") {
>                         set $real_script_name $1;
>                         set $path_info $2;
>                     }
>                     fastcgi_param SCRIPT_FILENAME
> $document_root$real_script_name;             #!
>                     fastcgi_param SCRIPT_NAME $real_script_name; #!
>                     fastcgi_pass        unix:/mnt/md0/test.sock;
> #                   include             /usr/local/nginx/conf/phpcgi.conf;
> #                   fastcgi_index       index.cgi;
> #                   fastcgi_param       PATH_TRANSLATED
> $fastcgi_script_name;
>                     fastcgi_param       CONTENT_TYPE
> $content_type;
>                     fastcgi_param       CONTENT_LENGTH
> $content_length;
>                     fastcgi_param       DOCUMENT_ROOT
> $document_root;                 #!
> #                   fastcgi_param       DOCUMENT_URI
> $document_uri;
>                     fastcgi_param       GATEWAY_INTERFACE       CGI/1.1;
> #!
> #                   fastcgi_param       PATH_INFO2
> "http://$http_host$request_uri";
>                     fastcgi_param       QUERY_STRING
> $query_string;
>                     fastcgi_param       REMOTE_ADDR
> $remote_addr;                   #!
>                     fastcgi_param       REMOTE_PORT
> $remote_port;                   #!
>                     fastcgi_param       REQUEST_URI
> $request_uri;                   #!
>                     fastcgi_param       REQUEST_METHOD
> $request_method;                #!
> #                   fastcgi_param       SCRIPT_NAME2
> $fastcgi_script_name;
>                     fastcgi_param       SERVER_ADDR
> $server_addr;                   #!
>                     fastcgi_param       SERVER_NAME
> $server_name;                   #!
>                     fastcgi_param       SERVER_PORT
> $server_port;                   #!
>                     fastcgi_param       SERVER_PROTOCOL
> $server_protocol;               #!
>                     fastcgi_param       SERVER_SOFTWARE
> nginx/$nginx_version;           #!
>                     fastcgi_param       REDIRECT_STATUS 200;
>                 }
> ______________________________________________________________________
> ______
> ______

> Fcgi server not close connection ...
> $req->header(Connection => 'close');  not work ...
> :-(

> _______________________________


Но его код из гиты тоже нерабочий  smile

Добавлено через 4 минуты и 13 секунд
Кстати как зствать poe нагружать все головы проца а не одну ?
PM MAIL   Вверх
Ramirez
Дата 17.6.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



POE всегда испоняется в одном процессе. 
Можно использовать POE::Wheel::Run для запуска чего-либо отдельным подпроцессом. Тогда эти процессы смогут работать на разных ядрах. При этом с созданным процессом сохряняется связь через stdin, stdout, stderr.

так например POE::Component::EasyDBI  работает.

Это сообщение отредактировал(а) Ramirez - 17.6.2009, 16:44
PM ICQ   Вверх
nagual2
Дата 17.7.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А как переделать для многопоточности такое:

Код

use POE::Component::Generic::Net::SSH2;

my $ssh = POE::Component::Generic::Net::SSH2->spawn(
    alias   => 'my-ssh',
    verbose => 1,
    debug   => 0 );

my $channel;

POE::Session->create(
    inline_states => {
        _start => sub {
            $poe_kernel->delay( 'connect', $N );
        },

        connect => sub {
            $ssh->connect( {event=>'connected'}, $HOST, $PORT );
        },

        connected => sub {
           $ssh->auth_password( {event=>'login'}, $USER, $PASSWORD );
        },

        error => sub {
            my( $resp, $code, $name, $error ) = @_[ARG0, $#_];
            die "Error $name ($code) $error";
        },

        login => sub {
            my( $resp, $OK ) = @_[ARG0..$#_];
            unless( $OK ) {
                $ssh->error( {event=>'error', wantarray=>1} );
                return;
            }
            $poe_kernel->yield( 'cmd_do' );
        },
      cmd_do => sub {
            $ssh->cmd( { event=>'cmd_output', wantarray=>1 }, $CMD );
            return;
        },

        cmd_output => sub {
            my( $resp, $stdout, $stderr ) = @_[ARG0..$#_];
            warn "Contents of home directory on $HOST:\n$stdout\n";
            $poe_kernel->yield( 'exec_do' );
        },

        exec_do => sub {
            $ssh->exec( { event=>'exec_running', wantarray=>0 },
                        "cat - >$FILE", ,
                        StdoutEvent => 'exec_stdout',
                        StderrEvent => 'exec_stderr',
                        ClosedEvent => 'exec_closed',
                        ErrorEvent  => 'exec_error'
            );
        },

        exec_running => sub {
            my( $resp, $ch ) = @_[ARG0..$#_];
            # keep channel alive
            $channel = $ch;
            $channel->write( {}, "$$-CONTENTS OF THE FILE\n" );
            $channel->send_eof( {event=>'done'} );
        },

        done => sub {
            undef( $channel );
            $ssh->shutdown;
        },

        exec_error => sub {
            my( $code, $name, $string ) = @_[ARG0..$#_];
            die "ERROR: $name $string";
        },

        exec_stderr => sub {
            my( $text, $bytes ) = @_[ARG0..$#_];
            die "STDERR: $text";
            return;
        },
        exec_stdout => sub {
            my( $text, $bytes ) = @_[ARG0..$#_];
            warn "STDOUT: $text";
            return;
        },

        exec_closed => sub {
            undef( $channel );
            $ssh->shutdown;
        },
    }
);

POE::Kernel->run();



Куда встроить цикл ?

Кстати в use POE qw(Component::Client::Whois); я встроил а в этот незнаю ... пока ...


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


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

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


 




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


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

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