C++-SNMP++ 如何使用异步get/get_next函数?

发布于 2017-10-13 05:34:38 字数 244 浏览 1349 评论 1

我正在用SNMP++做一个工程,需要从服务器端同时开启64个线程向几百台机器同时发起访问采集它们的信息。

  1. 如果使用阻塞方式调用的话会出现异常(64个线程同时向64个机器取数据);
  2. 如果将取数过程互斥的话就会和单线程一样慢; 所以请问如何用异步的方式实现高效率的数据采集呢?看虽然网上有get_next异步方式取数的例子,但是不详细,请问有没有童鞋可以给出一个详细的例子或者是解决问题的方案呢?

谢啦

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

偏爱自由 2017-10-14 20:04:23

如果可以,不要使用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++移植;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文