为何DonationAlerts API socket连接会返回服务器错误?
问题原因及修复方案
1. Socket.IO客户端版本不兼容
DonationAlerts的Socket服务端使用2.x版本Socket.IO,若你本地安装的是3.x/4.x版本的socket.io-client会直接触发连接错误。
执行以下命令切换到兼容版本:
npm uninstall socket.io-client npm install socket.io-client@2.5.0
2. 身份验证请求发送时机错误
你当前的add-user请求写在连接逻辑之外,会在Socket未完成连接时就发送请求,触发服务端拒绝。需要把这行代码移动到connect事件的回调函数内部。
3. 缺少必要的连接配置
需要显式指定传输协议为websocket,避免默认的长轮询模式被服务端拦截。
修正后的完整代码
const config = require("./config"); const io = require('socket.io-client'); // 增加连接配置参数 const socket = io.connect("wss://socket.donationalerts.ru:443", { transports: ['websocket'], reconnection: true, reconnectionDelay: 1000, reconnectionDelayMax: 5000 }); socket.on("connect_error", (err) => { console.error(`connect_error ${err.message}`); //process.exit() }); socket.on("disconnect", () => { console.log("socket disconnected"); }); socket.on("connect", () => { console.log("app is starting"); // 连接成功后再发送身份验证请求 socket.emit('add-user', { token: config.web.datoken, type: "minor" }); const engine = socket.io.engine; engine.on("disconnect", () => { console.log("Disconnected"); }) }) socket.on("donation", (donate) => { donate = JSON.parse(donate); let data = [ `- Username: ${donate["username"]}`, `- Amount: ${donate["amount"]} ${donate["currency"]}`, `- Message: ${donate["message"]}`] console.log(`${data.join("\n")}`); });
额外排查点
- 确认你使用的令牌是DonationAlerts后台Socket API专属令牌,而非OAuth2接口令牌,令牌权限需要勾选捐赠通知读取权限
- 检查本地网络是否可以正常访问
socket.donationalerts.ru:443,部分地区网络可能需要代理支持
内容的提问来源于stack exchange,提问作者Street02_
相关产品推荐
相关产品推荐

