后端nodejs,前端vue,实现websocket一对一聊天功能,要代码 
时间: 2023-03-24 17:01:33 浏览: 47
好的,以下是实现基于 Node.js 和 Vue 的 WebSocket 一对一聊天功能的示例代码:
Node.js 后端代码(使用 `ws` 模块实现 WebSocket 服务器):
```javascript
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
// 用于存储已连接的 WebSocket 客户端
const clients = new Map();
wss.on('connection', (ws) => {
// 生成唯一的客户端 ID,用于标识客户端
const clientId = Date.now().toString();
// 将新连接的客户端加入 clients 中
clients.set(clientId, ws);
console.log(`Client ${clientId} connected`);
// 发送欢迎消息给客户端
ws.send(`Welcome, client ${clientId}!`);
// 监听客户端发送的消息
ws.on('message', (message) => {
console.log(`Received message from client ${clientId}: ${message}`);
// 解析消息,获取目标客户端 ID 和消息内容
const { to, content } = JSON.parse(message);
// 从 clients 中获取目标客户端的 WebSocket 连接
const targetClient = clients.get(to);
if (targetClient) {
// 如果目标客户端存在,向其发送消息
targetClient.send(`Client ${clientId}: ${content}`);
} else {
// 如果目标客户端不存在,向当前客户端发送错误消息
ws.send(`Error: client ${to} not found`);
}
});
// 监听客户端关闭连接事件
ws.on('close', () => {
// 从 clients 中移除已关闭连接的客户端
clients.delete(clientId);
console.log(`Client ${clientId} disconnected`);
});
});
```
Vue 前端代码:
```html
<template>
<div>
<h2>WebSocket Chat</h2>
<div v-if="connected">
<div>
<label>Target Client ID:</label>
<input v-model="toClientId" />
</div>
<div>
<label>Message:</label>
<input v-model="message" />
</div>
<button @click="sendMessage">Send</button>
</div>
<div v-else>
<p>Connecting...</p>
</div>
<div>
<p v-for="msg in messages">{{ msg }}</p>
</div>
</div>
</template>
<script>
import WebSocket from 'isomorphic-ws';
export default {
data() {
return {
ws: null,
connected: false,
toClientId: '',
message: '',
messages: [],
};
},
mounted() {
// 连接 WebSocket 服务器
this.ws = new WebSocket('ws://localhost:8080');
// 监听连接成功事件
this.ws.addEventListener('open', () => {
console.log('Connected to WebSocket server');
this.connected = true;
});
// 监听接收消息事件
this.ws.addEventListener('message', (event) => {
console.log(`Received message: ${event.data}`);
this.messages.push(event.data);
});
// 监听连接关闭事件
this.ws.addEventListener('close', () => {
console.log('Disconnected from WebSocket server');
this.connected = false;
});
},
相关推荐



