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

使用ws包开发Twitch聊天工具时WebSocket连接立即断开(错误码1006)

Twitch WebSocket连接关闭码1006问题解决

错误码1006的含义

关闭码1006表示异常关闭,通常是因为连接的协议交互不符合Twitch IRC的要求,导致服务器主动断开连接。

代码问题分析

你的代码存在几个核心错误:

  • IRC命令发送顺序错误:Twitch要求先完成身份认证(PASS、NICK),再发送JOIN进入频道
  • PASS命令格式错误:Twitch OAuth令牌不需要前缀auth: ,直接使用令牌内容即可
  • 未发送CAP REQ请求必要扩展:缺少这个命令,服务器无法提供完整的聊天交互支持
  • 未处理PING请求:Twitch会定期发送PING,不回复PONG会被判定为连接失效

修正后的代码

const WebSocket = require('ws');
const twitchUrl = 'wss://irc-ws.chat.twitch.tv/';
const twitchChannel = '你的Twitch用户名'; // 替换为你的用户名,需小写
const twitchToken = '你的OAuth认证令牌'; // 直接填写令牌,不要加auth:前缀

const ws = new WebSocket(twitchUrl);

ws.on('open', () => {
  console.log('Connected to Twitch Chat');
  // 优先发送认证命令
  ws.send(`PASS ${twitchToken}`);
  ws.send(`NICK ${twitchChannel}`);
  // 请求Twitch特定的能力扩展,获取完整聊天数据
  ws.send('CAP REQ :twitch.tv/tags twitch.tv/commands twitch.tv/membership');
  // 加入频道,注意频道名要加#前缀
  ws.send(`JOIN #${twitchChannel}`);
});

ws.on('message', (data) => {
  const message = data.toString();
  console.log(`Message: ${message}`);
  // 必须响应PING,否则服务器会断开连接
  if (message.startsWith('PING')) {
    ws.send(`PONG ${message.split(' ')[1]}`);
  }
});

ws.on('error', (error) => {
  console.log(`Error: ${error}`);
});

ws.on('close', (code, reason) => {
  console.log(`Connection closed! Code: ${code}. Reason: ${reason.toString()}`);
});

修复要点说明

  • 命令顺序:身份认证命令必须在JOIN之前发送,这是Twitch IRC的强制要求
  • 令牌格式:Twitch的OAuth令牌可以通过官方工具生成,直接填入即可,不需要额外前缀
  • 能力扩展:CAP REQ命令能让你获取用户标签、消息ID等关键信息,是实现完整聊天功能的基础
  • PING/PONG机制:这是WebSocket保持连接的标准方式,忽略会导致服务器主动断开

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:40:55