C++-SNMP++ 如何使用异步get/get_next函数?
我正在用SNMP++做一个工程,需要从服务器端同时开启64个线程向几百台机器同时发起访问采集它们的信息。
- 如果使用阻塞方式调用的话会出现异常(64个线程同时向64个机器取数据);
- 如果将取数过程互斥的话就会和单线程一样慢; 所以请问如何用异步的方式实现高效率的数据采集呢?看虽然网上有get_next异步方式取数的例子,但是不详细,请问有没有童鞋可以给出一个详细的例子或者是解决问题的方案呢?
谢啦
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果可以,不要使用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++移植;