# STOMP 集成完成 ## 已创建的文件 ### 核心文件 1. **`src/utils/stompService.ts`** - STOMP 核心服务 - 完整的 STOMP 客户端封装(基于 @stomp/stompjs) - 支持连接、订阅、发布 - 自动重连机制 - 服务注册和消息分发 ### 示例文件 2. **`src/utils/STOMP_USAGE.md`** - 详细使用文档 - API 文档 - 使用示例 - 迁移指南 - 故障排除 3. **`src/services/nodeService.ts`** - Node 服务示例 - 展示如何封装业务服务 - 设备节点管理 - 消息处理逻辑 4. **`src/components/StompDemo.vue`** - Vue 组件示例 - 完整的演示界面 - 连接控制 - 消息发送和日志 ## 快速开始 ### 1. 在 main.ts 中初始化 ```typescript import { createApp } from 'vue'; import App from './App.vue'; import { stompService } from './utils/stompService'; const app = createApp(App); // 连接 STOMP 服务器(默认地址:ws://localhost:8080/stomp-endpoint) stompService.connect({ // 可选配置 // brokerUrl: 'ws://your-server:8080/stomp-endpoint', // username: 'admin', // password: 'password', reconnectDelay: 5000 }); app.mount('#app'); ``` ### 2. 在组件中使用 ```vue ``` ### 3. 查看演示 将 `StompDemo.vue` 组件添加到您的路由中: ```typescript // router/index.ts import StompDemo from '@/components/StompDemo.vue'; { path: '/stomp-demo', name: 'StompDemo', component: StompDemo } ``` 然后访问 `/stomp-demo` 查看演示界面。 ## 主要特性 ✅ **自动重连** - 连接丢失后自动重连(默认 5 秒间隔) ✅ **服务注册** - 支持多个业务服务注册 ✅ **消息分发** - 自动将消息分发到对应服务 ✅ **TypeScript** - 完整的类型支持 ✅ **错误处理** - 完善的错误处理和日志 ✅ **易于扩展** - 可轻松添加新服务 ## 消息命令类型 ```typescript MqttCmd = { Channel: 'channel', // 通道状态 NodeInit: 'nodeInit', // Node 初始化 Node: 'node', // Node 更新 User: 'user', // 用户登录 Control: 'control', // 控制命令 VideoInit: 'videoInit', // 视频初始化 VideoCtl: 'videoCtl', // 视频控制 Lock: 'lock', // 锁控 Alarm: 'alarm', // 告警 Info: 'info', // 通知提示 SocketDebugger: 'socketDebugger' // 调试 } ``` ## 从 ExtJS 迁移 ### ExtJS 版本 ```javascript Rec.mqtt.connect(); Rec.service.node = { msgNode: function(data) {} }; Rec.mqtt.send(cmd, value); ``` ### Vue 版本 ```typescript import { stompService } from '@/utils/stompService'; stompService.connect(); stompService.registerService('node', { msgNode: (data) => {} }); stompService.send('/app/web/write', cmd, value); ``` ## 连接地址 **默认连接地址:** - 开发环境:`ws://localhost:8080/stomp-endpoint` - 生产环境:`ws://your-domain/stomp-endpoint` **自定义连接地址:** ```typescript stompService.connect({ brokerUrl: 'ws://192.168.1.100:8080/stomp-endpoint' }); ``` ## 注意事项 1. **连接时机**: 建议在 `main.ts` 中应用启动时连接 2. **服务注册**: 在组件的 `onMounted` 生命周期注册 3. **资源清理**: 组件卸载时根据需要清理 4. **TypeScript**: 所有方法都有完整类型定义 ## 需要帮助? - 查看 `src/utils/STOMP_USAGE.md` 获取详细文档 - 查看 `src/components/StompDemo.vue` 获取完整示例 - 查看 `src/services/nodeService.ts` 获取服务封装示例 ## 下一步 1. 根据您的业务需求创建相应的服务 2. 将现有的 ExtJS 服务迁移到新的架构 3. 添加更多错误处理和日志记录 4. 实现消息持久化和离线缓存