错误:在建立连接之前关闭了 WebSocket
Posted
技术标签:
【中文标题】错误:在建立连接之前关闭了 WebSocket【英文标题】:Error: WebSocket was closed before the connection was established 【发布时间】:2021-04-11 08:09:07 【问题描述】:我有 Discord Music 机器人,它已经运行了将近一年。从昨天开始,我遇到了一个问题:
Unable to play a music:
Error: WebSocket was closed before the connection was established
这是我的代码:
try
var connection = await voiceChannel.join();
if(guild.me.hasPermission("DEAFEN_MEMBERS")) guild.me.voice.setDeaf(true);
queueContruct.connection = connection;
play(message.guild, queueContruct.songs[0], message);
catch (err)
queue.delete(message.guild.id);
errorMessage(message, "1058");
console.error("Unable to play a music: ");
return console.error(err);
播放功能:
async function play(guild, song, message)
const serverQueue = queue.get(guild.id);
if (!song)
if(serverQueue.voiceChannel)
serverQueue.voiceChannel.leave();
else
guild.voice.channel.leave();
queue.delete(guild.id);
return;
try
let player = await ytdl(song.url, filter: 'audioonly', quality: 'highestaudio', highWaterMark: 1 << 25, opusEncoded: true, encoderArgs: ['-af', 'bass=g=0']);
const dispatcher = serverQueue.connection.play(player, type: 'opus', highWaterMark: 1, bitrate: 'auto', fec: true, volume: false )
.on("finish", () =>
serverQueue.songs.shift();
play(guild, serverQueue.songs[0], message);
)
.on("error", error =>
console.error(error);
);
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
catch(err)
errorMessage(message, "1060");
我不知道是什么问题。有任何想法吗?这个错误到底是什么意思?
【问题讨论】:
【参考方案1】:当您在未建立连接时在 websocket 上调用 close() 时会发生这种情况。您在问题中包含的代码不包含 close();检查 close(),并确保在未建立连接时不调用它。
discord.js 使用 ws,这是抛出错误的地方:
https://github.com/websockets/ws/blob/a2c0d447af711ca245cb534159fa7c4d9ae67e64/lib/websocket.js#L222
因此,如果 websocket 处于 CONNECTING 状态并且您调用 close() 则会引发错误。
参考资料: https://***.com/a/12503628/9483495
【讨论】:
感谢您的回答!但我很确定它根本没有调用任何 close() 函数。 Discord.js 可以在幕后调用它。我不确定它什么时候调用它。 我也收到了这个错误:Error [VOICE_CONNECTION_TIMEOUT]: Connection not established within 15 seconds.
我认为您的主要问题是连接问题,不知道为什么,可能是由于服务器不和谐。此呼叫在哪里打开连接? var connection = await voiceChannel.join();
是的,我认为问题是连接问题。谢谢!以上是关于错误:在建立连接之前关闭了 WebSocket的主要内容,如果未能解决你的问题,请参考以下文章
socket.io 错误 - Web 套接字连接在建立连接之前关闭
Django Channels 错误:失败:在建立连接之前关闭 WebSocket