服务器显示POE,POE:自定义POE中的重复服务器警报::组件

我正在尝试使用perl POE设置客户端 - 服务器应用程序。

在阅读了CPAN上的一些POE文档并尝试了cookbook的一些示例(最终reccuring Alarms)后,我遇到了以下问题:

我的自定义组件中的事件在(客户端)会话中触发。

package POE::Component::OXO_TCP_Server;

use strict;

use warnings;

use POE;

use POE::Filter::Reference;

use POE::Component::Server::TCP;

sub new {

my ($proto, %args) = @_;

my $class = ref ($proto) || $proto;

my $send_up_intervall = 10;

my %default = (

Alias => "oxo_tcp_server",

Address => "localhost",

Port => 12345,

ClientFilter => "POE::Filter::Reference",

ClientInput => \&handle_client_input,

ClientDisconnected => sub {

$_[KERNEL]->yield("shutdown");

},

SessionParams => [ options => { debug => 1, trace => 1 } ],

InlineStates => {

_start => sub {

$_[HEAP]->{next_alarm_time} = int(time()) + 1;

$_[KERNEL]->alarm(tick => $_[HEAP]->{next_alarm_time});

},

tick => sub {

print "tick at ", time(), "\n";

$_[HEAP]->{next_alarm_time}++;

$_[KERNEL]->alarm(tick => $_[HEAP]->{next_alarm_time});

},

}

);

# add \%args; to \%default

my $self = POE::Component::Server::TCP->new(%default);

return $self;

}

sub handle_client_input {...}

1;

当我向服务器发送一些输入事件时

=== 8071 === 2 -> tick (from ../lib/POE/Component/OXO_TCP_Server.pm at 65) tick at 1433857644

...

被解雇了。

但我希望他们从客户端独立解雇(仅限时间)。

我该怎么做?我没有在文档或食谱中找到这个。

为避免超载_start我还试图在中启动计时器

Started => sub {

$_[HEAP]->{next_alarm_time} = int(time()) + 1;

$_[KERNEL]->alarm(tick => $_[HEAP]->{next_alarm_time});

},

在第一个视图中看起来它正在工作,因为调试说:

=== 8093 === 1 -> tick (from ../lib/POE/Component/OXO_TCP_Server.pm at 47)

但事实并非如此。可能它仍然是错误的会话。想法?

感谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值