SNMP++ 如何使用异步get/get_next函数?
我正在用SNMP++做一个工程,需要从服务器端同时开启64个线程向几百台机器同时发起访问采集它们的信息。
- 如果使用阻塞方式调用的话会出现异常(64个线程同时向64个机器取数据);
- 如果将取数过程互斥的话就会和单线程一样慢; 所以请问如何用异步的方式实现高效率的数据采集呢?看虽然网上有get_next异步方式取数的例子,但是不详细,请问有没有童鞋可以给出一个详细的例子或者是解决问题的方案呢?
谢啦
千梵是笨蛋
10 years, 4 months ago
Answers
- 如果可以,不要使用SNMP++提供的事务处理接口,使用自己的事务处理接口,直接解析SNMP的PDU;因为SNMP++的事务处理接口貌似是一个线程一个,所以效率不高,并发上不去;要那种事务和线程不关联的,并发才能提升上去
- 如果只有一个线程用于收SNMP的数据,解析SNMP PDU包后匹配事务池中的事务,你的并发可以好几千好几万都OK
- 如果你知道了所有的MIB值了,就没必要使用get_next了,全部直接get就ok了,get_next,是用于自己不知道下一个MIB oid是多少的情况下;如果自己知道这些东西了,直接get更加快
- https://git.oschina.net/newzai/SNMP 有我开发的一个SNMP网管,你可以参考一下,使用的是ASNMP,而不是SNMP++,ASNMP是从SNMP++移植过来的基于ACE库的一个SNMP库,其头文件等基本上和SNMP++移植;
僕OTAKU
answered 10 years, 4 months ago