我正在使用FreezeThaw模块将序列化对象从客户端发送到服务器 . 它对于具有有限数量的条目的数组引用工作正常,但是当我对更大的祝福对象数组执行相同操作时,服务器正在停止
分段故障(核心转储)
以下是我正在使用的内容
客户:
my $message = freeze $_[1]; # encode_json
$mq->publish($channel_id, $routing_key, $message);
服务器:
my $message = $payload->{body} ;
my @got = thaw $message;
print Dumper(@got);
当我使用下面的数组引用它到达服务器,但在打印后立即停止,服务器停止时出现分段错误错误 .
$VAR1 = [
[
bless( {
'oidptr' => bless( do{\(my $o = '140488241049968')}, 'netsnmp_oidPtr' )
}, 'NetSNMP::OID' ),
'600',
67
],
... approximately 200 lines repeated
1 回答
冻结/解冻对
NetSNMP::OID
对象不起作用 .NetSNMP::OID
使用XS code . XS代码在C中分配数据结构,并使该数据的地址在Perl中可用 . 存储在Perl对象中的唯一数据,以及使用freeze
和thaw
保存和恢复的唯一数据是该地址 . 该地址的内容将无法跨进程或跨不同计算机上的客户端 - 服务器边界生存 .发生崩溃是因为服务器采用的是基本上是随机存储器的地址,并尝试将其理解为netsnmp_oid_t data structure .
您将不得不想出另一种方法来访问和序列化
NetSNMP::OID
对象的实际内容 .