You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js调用Google智能家居API发送ReportState时遇socket hang up错误

解决Node.js对接Google智能家居API触发socket hang up问题的思路

问题描述

我使用Node.js客户端对接Google智能家居服务,当每分钟向Google智能家居API发送的请求数超过100~150次时,会出现以下错误:

FetchError: request to https://homegraph.googleapis.com/v1/devices:reportStateAndNotification failed, reason: socket hang up

根据官方文档,每个Actions项目默认限制为60秒内6000次请求,我的请求量远未达到这个数值,但仍触发了该问题。使用的依赖版本:

  • @googleapis/homegraph: 3.0.2
  • Node.js: 18.4.0

排查及解决思路

  • 调整Node.js连接池配置
    Node.js的HTTPS/HTTP模块默认有连接池socket数量限制(默认maxSockets为5),短时间大量请求会导致新请求等待可用socket超时,触发socket hang up。可以手动调整全局连接池参数:
const https = require('https');
// 提升HTTPS连接池最大socket数
https.globalAgent.maxSockets = 100;

也可以在@googleapis/homegraph客户端初始化时,自定义配置agent参数来单独控制该客户端的连接池。

  • 优化请求批量处理
    reportStateAndNotification接口支持批量上报多个设备的状态变更,无需为每个设备单独发起请求。将多个设备的状态合并到同一请求中,能大幅减少请求总数,降低连接压力。

  • 排查依赖库版本问题
    @googleapis/homegraph 3.0.2版本可能存在请求连接复用的bug,或者超时设置不合理。尝试升级到该库的最新稳定版本,或者改用axios/node-fetch等HTTP库手动实现请求,对比是否还会出现相同问题。

  • 验证隐性限流规则
    除了文档标注的全局配额,Google可能对单个客户端IP、单用户设备设置了隐性的并发请求限制。可以尝试给请求添加小间隔(比如每10个请求增加100ms延迟),或者在多IP环境下分散请求发起源,观察问题是否缓解。

  • 排查网络链路问题
    服务器到Google API的网络链路可能存在超时、丢包,或者防火墙/代理限制了并发连接数。可以用curl模拟并发请求测试网络稳定性,或者查看服务器的网络监控日志,确认是否有连接被异常中断的情况。

内容的提问来源于stack exchange,提问作者Tommy ASAI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:01:18