免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7374 | 回复: 3
打印 上一主题 下一主题

请教AnyEvent::SNMP的用法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-21 11:08 |只看该作者 |倒序浏览
AnyEvent::HTTP和AnyEvent:ing都试通了。
但是AnyEvent::SNMP运行没有反应。
感觉这个作者太不喜欢写(完整可用的)例子了。
以下是给出的例子
运行没反应
查了anyevent 的文档,cv似乎没有wait方法啊
有人试通的吗?
  1. use AnyEvent::SNMP;
  2. use Net::SNMP;

  3. # just use Net::SNMP and AnyEvent as you like:

  4. # use a condvar to transfer results, this is
  5. # just an example, you can use a naked callback as well.
  6. my $cv = AnyEvent->condvar;

  7. # ... start non-blocking snmp request(s)...
  8. Net::SNMP->session (-hostname => "127.0.0.1",
  9.                      -community => "public",
  10.                      -nonblocking => 1)
  11.           ->get_request (-callback => sub { $cv->send (@_) });

  12. # ... do something else until the result is required
  13. my @result = $cv->wait;
复制代码

论坛徽章:
0
2 [报告]
发表于 2012-07-23 12:23 |只看该作者
你callback除了停止外也没说要做什么
print几个数就可以看到了

论坛徽章:
0
3 [报告]
发表于 2012-07-23 13:04 |只看该作者
回复 2# nsnake_cu
那个是作者的例子。
我的是这样的
  1. #/usr/bin/env perl
  2. #测试NET::SNMP的异步性能
  3. #先测试按设备并发的情形

  4. use AnyEvent;
  5. use AnyEvent::SNMP;
  6. use Net::SNMP;



  7. my $cocurrent = 1;    # 并发数
  8. #my @todoList = map { "192.168.6." . $_ } (1 .. 254); #
  9. my @todoList = ("192.168.6.87"); #


  10. my $cv = AnyEvent->condvar;


  11. doit() foreach 1..$cocurrent;
  12. sub doit{
  13.     my $ip = shift @todoList;
  14.     return if not defined $ip;

  15.     $cv->begin;
  16.     my $oid=".1.3.6.1.2.1.1.7.0";
  17.     my @oids=($oid);
  18.     my $sess=Net::SNMP->session (-hostname => $ip,
  19.                      -community => "public",
  20.                      -timeout => 2,
  21.                      -nonblocking => 1,
  22.                      -translate   => [-timeticks => 0x0]
  23.                      )
  24.           ->get_request (-varbindlist      => \@oids, -callback => sub { $cv->send (@_) });
  25.     #my $Ret=$sess->get_request (
  26.     #      -callback => sub {  done( $ip, @_ ) },
  27.     #      -varbindlist      => \@oids,
  28.     #      );


  29.     my @result = $cv->wait;
  30.     print @result;
  31. }


  32. $cv->recv();


复制代码
执行以后就挂住了


   

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
4 [报告]
发表于 2013-08-05 11:56 |只看该作者
新装环境.测试通过.
  1. #/usr/bin/env perl
  2. #测试anyevent::snmp 并发

  3. use AnyEvent;
  4. use AnyEvent::SNMP;
  5. use Net::SNMP;



  6. my $cocurrent = 100;    # 并发数
  7. #my @todoList = map { "192.168.6." . $_ } (1 .. 254); #
  8. my @todoList = ("192.168.6.87","192.168.6.25","192.168.6.45"); #

  9. my $oid=".1.3.6.1.2.1.1.1.0";  #sysDescr


  10. my $cv = AnyEvent->condvar;


  11. doit() foreach 1..$cocurrent;

  12. sub doit{
  13.     my $ip = shift @todoList;
  14.     return if not defined $ip;

  15.     $cv->begin;
  16.    # my $oid=".1.3.6.1.2.1.1.7.0";
  17.    # my @oids=($oid);
  18.    print "$ip.\n";
  19.     my $sess=Net::SNMP->session (-hostname => $ip,
  20.                      -community => "public",
  21.                      -timeout => 1,
  22.                      -nonblocking => 1,
  23.                      -translate   => [-timeticks => 0x0]
  24.                      )
  25.           ->get_request (
  26.            -varbindlist => [ $oid ],
  27.            #-varbindlist      => \@oids,
  28.            -callback => sub { done(@_,$ip) }
  29.           );

  30. }

  31. sub done {  
  32.     my ($session,$ip) = @_;
  33.     my $result = $session->var_bind_list();

  34.       if (!defined $result) {
  35.          printf "ERROR: Get request failed for host '%s': %s.\n",
  36.                 $session->hostname(), $session->error();
  37.                
  38.       }
  39.       else{
  40.           printf "The sysDescr for host '%s' is %s.\n",
  41.           $session->hostname(), $result->{$oid};
  42.       }   
  43.       $cv->end();      
  44.       &doit();              
  45. }


  46. $cv->recv();
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP