繁体   English   中英

使用Perl与Apple APNS连接的问题

[英]Issues with connecting with apple APNS using perl

我正在使用使用Net :: SSLeay的库(Net :: APNS :: Persistent)。 该库有助于与Apples APNS服务器进行通信。 我发现如果发送任何错误数据(例如错误的令牌或有效载荷格式不正确),则该程序将在尝试三次后终止。 而且它没有显示错误消息。

根据我的调试,此问题是从SSLeay.pm的行号1895发生的

$ wrote = write_partial($ ssl,$ write,$ to_write,$$ data_ref);

我试图捕获是否发送了任何异常,学期信号,但没有运气。 如果出现网络问题或任何类型的错误,我希望它会显示一条错误消息/可以处理的异常。 但这只是扼杀了该程序而没有说什么。 有没有办法解决这个问题? 我的代码如下:

package apnsClient;

use Net::APNS::Persistent;
use Data::Dumper;
use Test::Trap;

my $cfg;
my $apns;

sub load {
    my $class = shift;
    my $self = {
        _cfg => shift,
    };

    $cfg = $self->{_cfg};

    bless $self, $class;
    return $self;
}

sub connect {
    my ($sandbox, $cert, $key, $pass) = $cfg->getAPNSServer();

    print "[x] Cert $cert Key $key \n";

    $apns = Net::APNS::Persistent->new({
        sandbox => $sandbox,
        cert    => $cert,
        key     => $key,
    }) or die("[-] Unable to connect to APNS server");
}

sub push {
    my ($class,$token,$payload) = @_;

    print "[+] Sending push with token: $token and Data: \n ".Dumper($payload);

    $apns->queue_notification(
       $token,
       $payload
       );
    print "[+] Sending apns queue \n";
    $apns->send_queue;
    print "[+] Sent \n";
}

sub disconnect {
    $apns->disconnect;
}

1;

终于找到了问题。 如果提供了无效令牌,Apple服务器将丢弃会话,并且当写入套接字失败时,write_partial函数将发送终止信号。 为了防止脚本终止,我们需要使用

$SIG{'PIPE'} = 'IGNORE';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM