Files
wecome-openclaw-client/electron/main.js
徐总 b06ef2d8ca feat: 添加详细的 OpenClaw 连接日志
日志增强:
- 连接开始:显示目标地址、协议版本、Token 状态
- WebSocket 打开:显示就绪状态
- 发送消息:显示完整请求内容
- 接收消息:显示原始数据(前 500 字节)、消息类型、事件名称
- 响应处理:显示响应状态、成功/失败、错误信息
- 连接关闭:显示关闭代码、原因、是否干净关闭
- 错误处理:显示错误类型、堆栈跟踪、针对性建议
- 关闭代码诊断:1006/1002/1003/1008/1011 等代码的含义
- SSL 错误诊断:WRONG_VERSION_NUMBER/ECONNREFUSED/ETIMEDOUT 等

方便快速定位 OpenClaw Gateway 连接问题
2026-03-10 00:38:15 +08:00

119 lines
5.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

this.socket.on('open', () => {
console.log('[OpenClaw] ✅ WebSocket 连接已建立');
console.log('[OpenClaw] 就绪状态:', this.socket.readyState, '(1=OPEN)');
this.isConnected = true;
this.reconnectAttempts = 0;
// 检查窗口是否存在
if (mainWindow && !mainWindow.isDestroyed()) {
this.eventHandler('connected');
}
// 主动发送 connect 请求(兼容模式:不等待 challenge
console.log('[OpenClaw] 📤 准备发送 connect 请求...');
this.sendConnect();
});
this.socket.on('message', (data) => {
// 窗口已关闭时忽略消息
if (!mainWindow || mainWindow.isDestroyed()) {
return;
}
try {
const messageStr = data.toString();
console.log('[OpenClaw] 📥 收到消息 (长度:', messageStr.length, '字节)');
console.log('[OpenClaw] 原始数据:', messageStr.substring(0, 500) + (messageStr.length > 500 ? '...' : ''));
const message = JSON.parse(messageStr);
console.log('[OpenClaw] 消息类型:', message.type);
if (message.type === 'event') {
console.log('[OpenClaw] 事件名称:', message.event);
} else if (message.type === 'res') {
console.log('[OpenClaw] 响应 ID:', message.id);
console.log('[OpenClaw] 响应状态:', message.ok ? '✅ 成功' : '❌ 失败');
if (!message.ok) {
console.log('[OpenClaw] 错误信息:', message.error);
}
}
// 处理 connect.challenge 质询
if (message.type === 'event' && message.event === 'connect.challenge') {
console.log('[OpenClaw] 🔐 收到 challenge 质询');
console.log('[OpenClaw] Nonce:', message.payload?.nonce);
console.log('[OpenClaw] 发送 connect 请求响应 challenge...');
this.sendConnect(message.payload?.nonce);
return;
}
this.handleMessage(message);
} catch (error) {
console.error('[OpenClaw] ❌ 解析消息错误:', error.message);
console.error('[OpenClaw] 原始数据:', data.toString().substring(0, 200));
}
});
this.socket.on('close', (event) => {
console.log('[OpenClaw] 🔴 WebSocket 连接已关闭');
console.log('[OpenClaw] 关闭代码:', event.code);
console.log('[OpenClaw] 关闭原因:', event.reason || '无');
console.log('[OpenClaw] 是否干净关闭:', event.wasClean);
console.log('[OpenClaw] 就绪状态:', this.socket.readyState, '(3=CLOSED)');
this.isConnected = false;
// 检查窗口是否存在
if (mainWindow && !mainWindow.isDestroyed()) {
this.eventHandler('disconnected');
}
// 根据关闭代码给出建议
if (event.code === 1006) {
console.log('[OpenClaw] ⚠️ 异常关闭1006- 可能是网络问题或服务器拒绝连接');
} else if (event.code === 1002) {
console.log('[OpenClaw] ⚠️ 协议错误1002- 服务器不支持的协议');
} else if (event.code === 1003) {
console.log('[OpenClaw] ⚠️ 数据类型错误1003- 服务器不接受的数据格式');
} else if (event.code === 1008) {
console.log('[OpenClaw] ⚠️ 策略违规1008- 违反服务器策略');
} else if (event.code === 1011) {
console.log('[OpenClaw] ⚠️ 服务器错误1011- 服务器遇到问题');
}
this.scheduleReconnect();
});
this.socket.on('error', (error) => {
console.error('[OpenClaw] ❌ WebSocket 错误:', error.message);
console.error('[OpenClaw] 错误类型:', error.constructor.name);
console.error('[OpenClaw] 错误堆栈:', error.stack?.split('\n').slice(0, 3).join('\n'));
// 检测 SSL/TLS 错误并给出建议
if (error.message?.includes('WRONG_VERSION_NUMBER')) {
console.error('[OpenClaw] 🔴 SSL/TLS 协议不匹配!');
console.error('[OpenClaw] 可能原因:');
console.error('[OpenClaw] 1. 使用 wss:// 但服务器只支持 ws://');
console.error('[OpenClaw] 2. 使用 ws:// 但服务器只支持 wss://');
console.error('[OpenClaw] 3. SSL 证书问题(自签名/过期)');
console.error('[OpenClaw] 建议:');
console.error('[OpenClaw] - 尝试改用 ws://(非加密)');
console.error('[OpenClaw] - 确认端口是否正确');
console.error('[OpenClaw] - 检查服务器是否正常运行');
} else if (error.message?.includes('ECONNREFUSED')) {
console.error('[OpenClaw] 🔴 连接被拒绝 - 服务器可能未启动或防火墙阻止');
} else if (error.message?.includes('ETIMEDOUT')) {
console.error('[OpenClaw] 🔴 连接超时 - 网络问题或服务器无响应');
} else if (error.message?.includes('ENOTFOUND')) {
console.error('[OpenClaw] 🔴 域名解析失败 - 检查 URL 是否正确');
}
// 检查窗口是否存在
if (mainWindow && !mainWindow.isDestroyed()) {
this.eventHandler('error', {
error: error.message,
hint: error.message?.includes('WRONG_VERSION_NUMBER') ?
'SSL 协议不匹配,请检查是否应该使用 ws://而不是 wss://' : null
});
}
});