vue3 +websocket聊天室
时间: 2025-01-17 08:57:58 浏览: 47
### 使用 Vue3 和 WebSocket 实现聊天室功能
#### 创建 WebSocket 连接
为了实现实时通讯,在前端可以利用 `WebSocket` API 来创建到服务器的持久化连接。当页面加载完成之后,立即初始化一个新的 WebSocket 对象并指定要连接的服务端地址。
```javascript
import { ref, onMounted } from 'vue';
export default {
setup() {
const messages = ref([]);
let socket;
function initSocket(url) {
socket = new WebSocket(url);
// 当收到消息时触发此事件处理程序
socket.onmessage = (event) => {
console.log('Message received:', event.data);
messages.value.push(event.data);
};
// 处理连接关闭的情况
socket.onclose = () => {
console.warn('Connection closed');
};
// 错误处理
socket.onerror = (error) => {
console.error(`WebSocket error observed: ${error}`);
}
}
onMounted(() => {
initSocket('ws://yourserver.com/socket'); // 替换成实际服务端提供的 websocket 地址
});
return {
messages,
sendMessage(messageText) {
if(socket.readyState === WebSocket.OPEN){
socket.send(JSON.stringify({ text:messageText }));
}else{
console.error("Websocket is not open");
}
},
};
},
};
```
上述代码展示了如何通过组合式API定义了一个响应式的 `messages` 数组用于存储所有的聊天记录,并且封装了发送消息的方法 `sendMessage()`[^1]。
#### 组件模板部分
接下来编写组件内的HTML结构来展示这些数据以及提供输入框让用户能够提交新的消息:
```html
<template>
<div class="chat-room">
<!-- 显示所有历史消息 -->
<ul v-for="(msg, index) in messages" :key="index">
{{ msg }}
</ul>
<!-- 用户输入新消息的地方 -->
<input type="text" @keyup.enter="sendNewMessage"/>
</div>
</template>
<script lang="ts">
// ... 上面提到过的 JavaScript 部分 ...
methods:{
sendNewMessage(e:Event){
this.sendMessage((e.target as HTMLInputElement).value);
e.target.value='';
}
}
</script>
```
这段代码片段实现了基本的消息显示列表和一个简单的表单控件以便于用户键入文字后按下回车键即可发出一条新消息给其他参与者。
阅读全文
相关推荐


















