使用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
相关产品推荐
相关产品推荐

