1
私はいくつかのプロトコル(HTTP、IRC、XMPP)を橋渡しするシステムを構築するためにPOEを使用しています。これらのプロトコルを処理する単一イベントループを駆動するためにPOEを使いたいと思います。これを安全に行うことはできますか?同時に複数のPerl POEプロバイダが許可されていますか?
私はいくつかのプロトコル(HTTP、IRC、XMPP)を橋渡しするシステムを構築するためにPOEを使用しています。これらのプロトコルを処理する単一イベントループを駆動するためにPOEを使いたいと思います。これを安全に行うことはできますか?同時に複数のPerl POEプロバイダが許可されていますか?
はい、できます。 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をすることができます。
完璧、ありがとうございます! – Jashank