我正在使用
FreezeThaw
模块
将序列化对象从客户端发送到服务器。它适用于具有有限数量条目的数组引用,但是当我为更大的祝福对象做同样的事情时服务器正在停止
分段错误(核心转储)
以下是我正在使用的内容
客户端:
<?php echo ($userinfo['c71st'] + $userinfo['c71st'] + $userinfo['c71st'])/2; ?>
服务器:
my $message = freeze $_[1]; # encode_json
$mq->publish($channel_id, $routing_key, $message);
当我使用下面的数组引用它到达服务器时,但是在打印之后,服务器会立即停止并出现分段错误。
my $message = $payload->{body} ;
my @got = thaw $message;
print Dumper(@got);
答案 0 :(得分:5)
冻结/解冻不会对NetSNMP::OID
个对象起作用。
NetSNMP::OID
使用XS code。 XS代码在C中分配数据结构,并使该数据的地址在Perl中可用。存储在Perl对象中的唯一数据,以及使用freeze
和thaw
保存和还原的唯一数据是该地址。该地址的内容将无法跨进程或跨越不同计算机上的客户端 - 服务器边界。
崩溃的发生是因为服务器采用的是基本上随机的内存地址,并尝试将其理解为netsnmp_oid_t
data structure。
您必须想出另一种方法来访问和序列化NetSNMP::OID
对象的实际内容。