You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
maotu-webtopo/STOMP_INTEGRATION.md

176 lines
4.2 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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
<script lang="ts" setup>
import { onMounted } from 'vue';
import { stompService, MqttCmd } from '@/utils/stompService';
onMounted(() => {
// 注册服务
stompService.registerService('myService', {
mqttReady() {
console.log('STOMP 已就绪');
},
msgNode(value) {
console.log('收到 Node 消息:', value);
}
});
});
// 发送消息
function sendCommand() {
stompService.send('/app/web/write', MqttCmd.Control, {
nodeId: 'node-001',
action: 'turnOn'
});
}
</script>
```
### 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. 实现消息持久化和离线缓存