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

Node-RED作为TCP服务器时如何处理入站消息并回发响应

Node-RED TCP服务器模式下入站消息处理与存活检测实现方案

完全可以实现,Node-RED原生TCP节点本身就支持服务器模式下同时处理入站、出站流量,不需要额外安装自定义节点,具体实现逻辑如下:

  • 基础节点配对配置
    不要单独部署TCP out节点,需要搭配同配置的TCP in节点共同使用:
    1. 新建一个TCP配置项,连接模式选择Listen on(即服务器模式),填写你要监听的端口号
    2. 将TCP in、TCP out两个节点都关联到这个新建的配置项,同时两个节点都勾选「共享连接」选项,确保两个节点绑定到同一组客户端连接,不会出现端口占用问题
    3. 配置TCP in的数据拆分规则(按字符拆分、固定长度、流模式都可以,根据你的业务报文格式选择即可)
  • 被动响应式存活检测实现
    所有客户端发来的入站消息都会从TCP in节点输出:
    • 消息载荷msg.payload为客户端发送的实际内容
    • msg._session字段为当前连接的唯一会话标识,用来区分不同的客户端连接
      你只需要在TCP in节点后接一个switch节点,匹配msg.payload等于is alive?的消息,匹配通过后将响应内容(比如200 alive)赋值给msg.payload,再把消息流接到TCP out节点即可。TCP out节点会自动根据消息自带的msg._session标识,把响应精准发回对应发起请求的客户端,不会串流到其他已连接的客户端。
  • 主动探活的补充实现
    如果你需要服务端主动发起心跳检测,不用等客户端上报,可以加个定时注入节点配合上下文变量实现:
    1. 每次TCP in收到任意客户端的消息,就把当前时间戳存到流上下文里,key对应msg._session的值,作为该客户端的最后活跃时间
    2. 定时注入节点每30秒触发一次,遍历上下文里存的所有会话记录,给每个会话发心跳探测包,同时对比当前时间和最后活跃时间,如果某客户端超过90秒没有任何消息响应,就可以触发连接断开逻辑,清理僵尸连接。

踩坑提示:不要给TCP in和TCP out分别创建两个同端口的服务器模式配置,会直接触发端口占用报错,两个节点必须复用同一个TCP配置条目。

内容的提问来源于stack exchange,提问作者Pol Rodoreda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:48:16