node-opcua中crawler.read超时(60000ms),如何修改超时时间?
解决node-opcua NodeCrawler.read超时问题
你遇到的TypeError本质是node-opcua-client-crawler内部的read操作超时(默认60秒),你设置的客户端requestedSessionTimeout是会话级别的超时,不影响crawler单次read请求的超时时间,以下是可行的解决方法:
直接给NodeCrawler配置read超时参数
NodeCrawler的构造函数支持传入第二个配置参数,其中readOptions可以指定单次read请求的超时时间,修改你的crawler初始化代码:const crawler = new NodeCrawler(session, { readOptions: { requestedTimeout: 120000 // 调整为需要的超时时间,比如120秒 } });全局覆盖session.read的默认超时
如果上述方法不生效,可以通过包装session的read方法,强制设置超时参数:const session = await client.createSession(userInfo); // 包装原read方法,添加默认超时 const originalRead = session.read; session.read = function(nodesToRead, options = {}) { // 合并自定义超时和传入的选项 const mergedOptions = { requestedTimeout: 120000, ...options }; return originalRead.call(this, nodesToRead, mergedOptions); }; // 再初始化crawler const crawler = new NodeCrawler(session);辅助优化建议
- 检查PLC的负载情况,若PLC同时处理大量请求,可能导致响应延迟
- 确认网络连接稳定性,避免因网络丢包或延迟触发超时
- 若PLC节点数量极大,可考虑分批次爬取(部分版本的NodeCrawler支持配置批量大小)
内容的提问来源于stack exchange,提问作者Jantoma21
相关产品推荐
相关产品推荐

