utils/
├── websocket.js # WebSocket连接管理器
├── messageHandlers.js # 消息处理器
└── README.md # 说明文档
mixins/
└── websocketMixin.js # WebSocket功能混入
config/
└── websocket.js # WebSocket配置文件
store/modules/
└── websocket.js # WebSocket状态管理
// 在页面组件中引入mixin
import websocketMixin from '@/mixins/websocketMixin.js';
export default {
mixins: [websocketMixin],
onLoad() {
// mixin会自动处理WebSocket连接
// 如果用户已通过审核,会自动连接WebSocket
}
}
// 在页面中重写消息处理方法
export default {
mixins: [websocketMixin],
methods: {
// 重写新订单通知处理
handleNewOrderNotification(message) {
console.log('自定义处理新订单:', message);
// 自定义逻辑
this.showCustomOrderDialog(message);
}
}
}
export default {
mixins: [websocketMixin],
methods: {
// 手动连接
connectManually() {
this.initWebSocket();
},
// 手动断开
disconnectManually() {
this.disconnectWebSocket();
},
// 重连
reconnectManually() {
this.reconnectWebSocket();
},
// 发送消息
sendTestMessage() {
this.sendWebSocketMessage('test message');
},
// 检查连接状态
checkStatus() {
const status = this.getWebSocketStatus();
console.log('WebSocket状态:', status);
}
}
}
export default {
connection: {
maxReconnectAttempts: 5, // 最大重连次数
reconnectInterval: 5000, // 重连间隔(ms)
heartbeatInterval: 30000, // 心跳间隔(ms)
connectionTimeout: 10000 // 连接超时(ms)
},
notification: {
enableSound: true, // 启用声音提醒
enableVibration: true, // 启用震动提醒
enableToast: true, // 启用Toast通知
urgentOrderModal: true // 紧急订单使用模态框
}
}
import { MESSAGE_TYPES } from '@/utils/websocket.js';
// 可用的消息类型
MESSAGE_TYPES.NEW_ORDER // 新订单
MESSAGE_TYPES.ORDER_CANCEL // 订单取消
MESSAGE_TYPES.ORDER_STATUS_UPDATE // 订单状态更新
MESSAGE_TYPES.SYSTEM_MESSAGE // 系统消息
import riderWebSocketManager from '@/utils/websocket.js';
// 连接WebSocket
riderWebSocketManager.connect(userInfo, baseUrl);
// 断开连接
riderWebSocketManager.disconnect();
// 发送消息
riderWebSocketManager.send('message');
// 检查连接状态
riderWebSocketManager.isConnected();
// 注册消息处理器
riderWebSocketManager.onMessage('NEW_ORDER', (message) => {
console.log('收到新订单:', message);
});
// 注册状态变化处理器
riderWebSocketManager.onStatusChange((status, data) => {
console.log('状态变化:', status);
});
import {
handleNewOrderNotification,
handleOrderCancelNotification,
handleSystemMessage,
registerMessageHandlers,
unregisterMessageHandlers
} from '@/utils/messageHandlers.js';
// 注册所有处理器
registerMessageHandlers(wsManager, this);
// 注销所有处理器
unregisterMessageHandlers(wsManager);
// 混入提供的方法
this.initWebSocket() // 初始化连接
this.disconnectWebSocket() // 断开连接
this.reconnectWebSocket() // 重连
this.sendWebSocketMessage() // 发送消息
this.getWebSocketStatus() // 获取状态
this.setWebSocketEnabled() // 启用/禁用
onShow
: 页面显示时自动检查并重连onHide
: 页面隐藏时保持连接beforeDestroy
: 组件销毁前清理资源onUnload
: 页面卸载时断开连接// 只需要基本的WebSocket功能
export default {
mixins: [websocketMixin]
// 就这么简单!
}
export default {
mixins: [websocketMixin],
methods: {
handleNewOrderNotification(message) {
// 自定义新订单处理逻辑
if (message.urgencyLevel >= 3) {
// 特急订单特殊处理
this.playUrgentSound();
this.showFullScreenAlert(message);
} else {
// 普通订单
this.showToast(message.orderNo);
}
}
}
}
export default {
mixins: [websocketMixin],
data() {
return {
wsStatus: '未连接'
}
},
methods: {
handleConnectionStatusChange(status) {
this.wsStatus = status;
// 更新UI状态显示
}
}
}
在开发环境中,WebSocket工具会自动输出详细的调试信息到控制台。
Q: WebSocket连接失败
// 检查用户状态
if (!this.userInfo || !this.userInfo.state) {
console.log('用户未通过审核');
}
// 检查网络连接
// 检查服务器地址配置
Q: 消息处理器不工作
// 确保正确注册了处理器
registerMessageHandlers(riderWebSocketManager, this);
// 检查消息类型是否匹配
console.log('消息类型:', message.type);
Q: 自动重连不工作
// 检查重连配置
riderWebSocketManager.reset(); // 重置重连状态
this.reconnectWebSocket(); // 手动重连
// 检查连接状态
console.log('连接状态:', this.getWebSocketStatus());
// 查看重连次数
console.log('重连次数:', riderWebSocketManager.reconnectAttempts);
// 监控消息处理性能
performance.mark('message-start');
// 处理消息...
performance.mark('message-end');
performance.measure('message-processing', 'message-start', 'message-end');