一、WebSocket集成步骤
连接初始化
在Vue组件中创建WebSocket实例,建议在mounted
生命周期中执行:
data() {
return {
socket: null,
messages: []
}
},
mounted() {
this.socket = new WebSocket('wss://your-server-endpoint');
}
事件监听配置
连接成功:通过onopen
处理认证或初始化操作:
this.socket.onopen = () => {
console.log('WebSocket connected');
this.socket.send(JSON.stringify({ type: 'auth', token: 'user-token' }));
};
消息接收:onmessage
将数据存入Vue响应式数组
this.socket.onmessage = (event) => {
const msg = JSON.parse(event.data);
this.messages.push(msg); // 自动触发视图更新
};
消息发送方法
封装发送逻辑,检查连接状态后发送数据
methods: {
sendMessage() {
if (this.socket.readyState === WebSocket.OPEN) {
this.socket.send(JSON.stringify({
content: this.inputText,
sender: 'user123'
}));
}
}
}
二、实时聊天实现流程
双向通信架构
- 用户A发送消息 → 服务端通过WebSocket广播 → 用户B的
onmessage
触发更新17。 - 服务端需维护连接池,按用户ID或群组路由消息18。
- 用户A发送消息 → 服务端通过WebSocket广播 → 用户B的
消息回显到界面
- 数据绑定:模板中通过
v-for
渲染messages
数组56:
- 数据绑定:模板中通过
<div class="chat-list">
<div v-for="(msg, index) in messages" :key="index">
<strong>{{ msg.sender }}:</strong> {{ msg.content }}
</div>
</div>
2 自动滚动:在updated
生命周期中滚动到最新消息位置
updated() {
const container = this.$el.querySelector('.chat-list');
container.scrollTop = container.scrollHeight;
}