问题标签 [poe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - 将同一主机中的多个应用程序实例注册到同一 Net-SNMP 代理
我已经为此苦苦挣扎了几天,但我找到的解决方案都没有按照我想要的方式工作(我可能完全错了,不过我已经很长时间没有使用 SNMP了) .
这是我公司的现有代码,一个使用 POE::Component::NetSNMP::Agent 连接到 net-snmp agentx 的 perl 应用程序。为该应用程序定义的 MIB 已定义,基础 oid 在 .154 中完成。MIB 文件在上面定义了 3 个表:状态 (.1)、统计 (.2) 和性能 (.3)。一切正常,代理注册正常,snmpwalk 显示数据正在更新等。
但现在已经实现了一项要求,允许在同一主机上运行多个(最多 32 个)应用程序实例。并且还要支持监控,这就带来了第一个问题:多次连接agentX时,相同的OID,只有一个实例连接,其他的都被拒绝。
我虽然做了这样的事情:
使用这种方法,每个实例(他们知道自己的 id)都可以毫无问题地注册到 AgentX(很好!)。按照上面的模型,状态、统计和性能表对所有实例都是通用的。
- 查询到 .154 将显示上述模型。
通过步行到 .154.1、.154.2 等来查询每个特定实例的数据也是可能的。
但我无法正常运行,因为 smlint、snmpwalk 和 iReasoning 抱怨预期的不同数据类型、数据显示不正确等。
到目前为止我已经尝试过:
数组:每个实例的主索引,状态的子索引,统计信息和性能索引与{主索引,子索引}。像这样:SNMP:ASN.1 MIB 定义。在表中引用表。
多重定义:为 32 个实例重新定义每个表和组件,并在名称上使用不同的索引。它还可以工作,但并不完全符合我的预期:父母的 snmpwalk 没有显示任何孩子,所以 snmpwalk 必须使用 . . . . .154.1, . . . . . .154.2 等
我也考虑过这个解决方案:通过 SNMP 监视同一主机上的多个 java 进程。但在我的情况下不起作用,因为实例连接到一个公共代理,它们没有自己的代理在不同的端口上运行。
我不得不承认我的想法已经不多了。同样,我可能完全错了,可能从错误的角度面对问题。
是否可以按照我正在寻找的方式实现这一点?在 SNMPv3 中,这可能对上下文很有用,但据我所知,它们在 net-snmp 中不可用。
编辑
从我上面的列表中,第二个解决方案是迄今为止效果更好的解决方案。
从父 MIB 定义了 32 个新的子 OID:
并且为每个 instanceId 重复表,python 脚本为此编写了大 MIB 文件(我知道,
每个实例的 snmpwalk 输出:
但结果不如我预期的那么好,因为掌握 .154 的 snmpwalk 显示 .154.1 的状态,而不是显示每个实例。不确定这是否是预期的行为。
perl - 如何正确关闭 POE 和 POE::Session?
POE
调用POE::Kernel->stop()
导致立即关闭。如何请求优雅关闭,等待 yield、post、call FIFO 为空再关闭?
perl - 如何指定要 ping 的数据包数?
我正在使用POE::Component::Client::Ping通过此示例ping 多个主机。
据我了解,这会向主机发送一个请求。是否可以指定要 ping 的数据包数量ping -c 4 HOST
?
perl - POE::Component::IRC,请求后如何预期动作?
我想要实现的目标:我的 PoCo::IRC 机器人请求您使用 RSA 密钥签署消息,但每次您识别时,该消息都有一个随机字符串(有点像#bitcoin-otc 的 gribble 机器人,但使用 RSA 而不是比特币)。
我希望它说类似
<mybot> With the key for 'donkus', sign the message '2FrNGk7QoCKQecIz', pass through base64.
它需要预测我签名消息的到来。然后我可以用 base64 中的签名消息回复,它会使用脚本中的硬编码公钥进行验证(可能使用 Crypt::RSA)。这种交换将通过私人消息传递。
这样我就可以在我的 EFnet 频道上创建一堆机器人来操作我,是的,我知道我可以使用 Eggdrop,但我更愿意编写自己的 perl 脚本,而不是配置所有垃圾。
perl - 我的 POE::Component::IRC 事件循环卡住了吗?
我的任务是编写一个 IRC 机器人,它将在这里加入内部 IRC 系统上的频道,并向似乎不再使用的频道发布消息,警告任何潜在用户该频道即将停用。我们的 IRC 系统有大约 6,500 个频道,需要将这些消息发布到它们,我们使用的 IRC 服务器(混合的自定义分支)将并发频道加入限制为每个连接 100 个。为了不达到这个限制,我得到的代码是这样的:
即它会查看我们是否已经加入,如果是,请尝试发布通知消息,然后立即分手。如果我们没有加入,它会先尝试加入(加入事件将触发消息发送)。
问题是代码似乎永远不会运行
行,因为最终我开始从 IRC 服务器返回 irc_405 事件,说代码加入了太多频道。有人知道我在做什么错吗?
perl - 使用 Bot::BasicBot 时如何发送原始 IRC 消息
Bot::BasicBot提供了一种获取底层 POE::Component::IRC::State 对象句柄的方法 pocoirc()。使用此对象句柄,似乎应该可以发送如下原始消息:
但是,这会给出错误“在没有包或对象引用的情况下无法调用方法“yield””——返回的对象似乎没有导出预期的方法。我是否误解了我要返回的对象类型,或者如何触发原始消息的发送?
perl - 使用 POE::Component::Client::HTTP 进行用户认证
我试图在 perl poe 中找到一个模块,它可以在制作HTTP request
.
HTTP 请求应该是非阻塞的
或者
我应该如何poe::component::client:http
通过提供用户名、密码详细信息来进行用户身份验证?
perl - Perl POE:警报/延迟排队
这是我第一次尝试Perl 对象环境(POE)。我正在尝试创建一个程序,该程序将作为服务运行,该服务通过 couchdb 获取设备列表,生成子进程以 60 秒间隔 ping 它们,同时将并发子进程的最大数量限制为 3。
在延迟(1 分钟)后,我能够成功地将子进程重新排队,但是,我不确定如何管理调用同一事件的多个警报/延迟。我正在尝试将它们存储在$_[HEAP]->{timers}->{$_}
给$_
定主机的位置。
欢迎任何建议/策略。
编辑 1:我发现这$_[KERNEL]->delay
不是为每个孩子设置计时器。我可以通过使用$_[KERNEL]->delay_set
来让它工作。我现在无法拼凑的是如何限制程序在给定时间运行超过 3 个进程。
我正在创建初始计时器_start
。如果子进程计数spawn
为$_[KERNEL]->delay_adjust
3 或更高,则应将延迟延长 5 秒。
为回答问题所花费的时间道歉,这生活在我的工作电脑上,这个编辑是在星期一,我回来的第一天。
perl - OpenSSH POE 会话卡住
我正在使用 POE::Component::OpenSSH 和每个设备的单独 POE::Session 对我们网络上的 300 多个无线电设备进行非阻塞 ssh。我拥有的脚本处于工作状态,但某些设备尚未配置正确的密码(为简单起见,我们为所有设备保留相同的密码,因此使用相同的密码 ssh 进入每个设备)。有时工程师会犯错误并使用非标准 ssh 密码安装设备。在这种情况下,如果 OpenSSH 无法通过身份验证,那么 POE::Session 就会卡住(_stop 永远不会被调用并且脚本永远不会退出)。我知道这不是一个纯粹的程序问题。我们每天在网络上安装的设备很少,我不能指望我们的工程师每次都输入正确的密码。所以即使我更正了我们现有设备上的密码,
我可以做 $kernel->stop 但我不喜欢那样。我希望会话自行清除。有没有办法使用观察者会话清除会话内 POE::Component::OpenSSH 使用的资源/服务?任何帮助表示赞赏。请在下面查看我的代码。