2011-09-09 5 views
1

여러 프로토콜 (HTTP, IRC, XMPP)을 연결하는 시스템을 구축하기 위해 POE를 사용하고 있으며 POE를 사용하여 이러한 프로토콜을 처리하는 단일 이벤트 루프를 구동하고 싶습니다. 이 작업을 안전하게 수행 할 수 있습니까? 그렇다면 어떻게해야합니까?여러 개의 동시 Perl POE 공급자가 허용됩니까?

답변

4

예, 가능합니다. this article을 읽으면 많은 도움이됩니다. 또한 여기 IRC 및 HTTP 함께 실행 코드 예제 : 그냥 기억 당신이 돌이 실행하기 전에 설정 모두 필요합니다 POE::Kernel->run()

#!/usr/bin/env perl 
use warnings; 
use strict; 
use POE; 

# Simple HTTP server 

use POE::Component::Server::HTTP; 

POE::Component::Server::HTTP->new(
    Port   => 32090, 
    ContentHandler => { 
    '/'  => \&http_handler 
    } 
); 

sub http_handler { 
    my ($request, $response) = @_; 
    $response->code(RC_OK); 
    $response->content("<html><body>Hello World</body></html>"); 
    return RC_OK; 
} 

# Dummy IRC bot on #bottest at irc.perl.org 

use POE::Component::IRC; 

my ($irc) = POE::Component::IRC->spawn(); 

POE::Session->create(
    inline_states => { 
    _start  => \&bot_start, 
    irc_001 => \&on_connect, 
    }, 
); 

sub bot_start { 
    $irc->yield(register => "all"); 
    my $nick = 'poetest' . $$ % 1000; 
    $irc->yield(
    connect => { 
     Nick  => $nick, 
     Username => 'cookbot', 
     Ircname => 'POE::Component::IRC cookbook bot', 
     Server => 'irc.perl.org', 
     Port  => '6667', 
    } 
); 
} 

sub on_connect { $irc->yield(join => '#bottest'); } 


# Run main loop 

POE::Kernel->run(); 

을 그리고 당신은 당신의 작업 사이 broadcast events에게 있습니다.

+0

완벽한, 감사합니다! – Jashank