咨询:使用sails.io.js 1.2.1捕获Socket连接拒绝的方法
捕获Socket连接拒绝的实现方法(针对sails.io.js 1.2.1 & socket.io-client 2.1.0)
虽然Sails官方文档只列出了connect和disconnect这两个系统事件,但因为sails.io.js本质是基于socket.io-client封装的,所以你可以直接使用底层socket.io-client提供的事件来捕获连接拒绝的场景。以下是几种可行的方案:
监听
connect_error事件:这是socket.io专门用于捕获连接阶段错误的事件,当连接被服务器拒绝、超时或者网络问题导致连接失败时会触发。示例代码:io.socket.on('connect_error', function(err) { console.log('连接被拒绝或失败:', err.message); // 在这里添加你的错误处理逻辑,比如提示用户、重试连接等 });监听
error事件:这个事件会捕获socket生命周期内的所有错误,包括连接阶段的拒绝错误、通信过程中的错误等。如果需要更宽泛的错误捕获,可以用这个:io.socket.on('error', function(err) { console.log('Socket发生错误:', err); // 根据错误类型判断是否是连接拒绝的情况 });超时检测辅助判断:如果担心某些场景下
connect_error没触发,可以设置一个超时定时器,在指定时间内如果未触发connect事件,则判定为连接失败(可能是被拒绝):// 设置10秒的连接超时 const connectionTimeout = setTimeout(() => { if (!io.socket.connected) { console.log('连接超时,大概率是被服务器拒绝或网络异常'); // 执行对应的处理逻辑 } }, 10000); // 连接成功时清除超时定时器 io.socket.on('connect', function() { clearTimeout(connectionTimeout); console.log('Socket连接成功'); });
需要注意的是,这些底层事件在你使用的socket.io-client 2.1.0版本中都是完全支持的,因为sails.io.js 1.2.1正是基于这个版本的socket.io-client构建的。Sails官方文档没有列出这些事件,是因为文档侧重点在Sails上层的WebSockets功能,而底层的socket.io能力是可以直接复用的。
内容的提问来源于stack exchange,提问作者Sasha Kos
相关产品推荐
相关产品推荐

