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

Node-RED仪表板中xterm与wetty的Socket连接故障排查求助

Node-RED仪表板中Xterm连接Wetty失败的问题排查与修复

核心错误点分析

  • Socket连接路径错误
    Wetty默认的WebSocket连接端点是/wetty/socket,而非根路径,直接连接ws://localhost:3001找不到对应的服务端点。

  • 混淆Socket.io与原生WebSocket
    Xterm的AttachAddon要求传入原生WebSocket实例,但你用了Socket.io的io()创建的Socket对象,两者API不兼容,无法直接对接。

  • 无效的服务端代码调用
    前端脚本运行在浏览器环境,无法访问Node-RED的context.global.get("socket.io"),这行代码完全无效,应删除。

  • (可选)缺少Socket.io客户端依赖
    即便要使用Socket.io,页面也未引入其客户端JS文件,会导致io未定义错误,但Wetty本身基于原生WebSocket,无需Socket.io。


修正后的代码

<link rel="stylesheet" href="/xterm/css/xterm.css" />
<script src="/xterm/lib/xterm.js"></script>
<script src="/xterm-addon-attach/lib/xterm-addon-attach.js"></script>
<div id="terminal"></div>
<script>
    // 创建原生WebSocket连接,指向Wetty的正确端点
    const socket = new WebSocket('ws://localhost:3001/wetty/socket');
    
    const term = new Terminal();
    // 注意AttachAddon的正确引用方式,部分版本需用AttachAddon.default
    const attachAddon = new AttachAddon.AttachAddon(socket);
    term.loadAddon(attachAddon);
    term.open(document.getElementById('terminal'));

    // 连接成功后再写入提示,避免过早执行
    socket.addEventListener('open', () => {
        term.write('Raspberry $ ');
    });
</script>

额外注意事项

  1. 先验证Wetty服务是否正常:直接访问http://localhost:3001,确认Web终端能正常使用。
  2. 若Node-RED与Wetty存在跨域问题,可通过Node-RED配置反向代理转发Wetty请求,或在启动Wetty时添加CORS参数(如--cors-origin "*")。
  3. 若AttachAddon构造报错,尝试替换为new AttachAddon.default(socket),部分版本的Addon导出方式不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:15:52