1.没有前言:只有兴趣直接上代码
!# 用node.js 服务端代码块1
const express = require('express');
const WebSocket = require('ws');
const cors = require('cors');
const app = express();
const port = 8090;
const corsOptions = {
origin: '*',
methods: ['GET', 'HEAD', 'PUT', 'POST', 'DELETE'],
allowedHeaders: ['Origin', 'No-Cache', 'X-Requested-With', 'If-Modified-Since', 'Pragma', 'Last-Modified', 'Cache-Control', 'Expires', 'Content-Type', 'X-E4b-Metadata']
};
app.use(cors()); 挂载到express框架的中间件
const server = app.listen(port, () => {
console.log(`服务器运行在http://localhost:${port}`);
});
app.use(express.static('public'));
const wss = new WebSocket.Server({
server,
origin: ['http://localhost:8090'],
verifyClient: (info, done) => {
done(true);
}
});
const clients = new Set();
wss.on('connection', (ws) => {
clients.add(ws);
console.log('新客户端连接');
ws.send('欢迎连接到WebSocket服务器!');
ws.on('message', (message) => {
console.log('接收到消息:', message.toString());
ws.send(
message.toString()
)
const broadcastMessage = `客户端发送:${message.toString()}`;
clients.forEach(client => {
if (client !== ws && client.readyState === WebSocket.OPEN) {
client.send(broadcastMessage);
}
});
});
ws.on('close', () => {
clients.delete(ws);
console.log('客户端断开连接');
});
});
Vue代码,也可以用DeepSeek 实现基本的JS方式的客户端demo
!# vue 前端基本框架,自己完善。。。。。。我就是不完善 这个代码块我是放在App.vue里面,因为这是个demo,自己看情况
<template>
<div class="chat-container">
<h1>WebSocket聊天室</h1>
<div class="messages" v-for="(message, index) in messages" :key="index">
<div class="message" :class="{ received: message.type === 'received', sent: message.type === 'sent' }">
<div class="content">{{ message.text }}</div>
<div class="timestamp">{{ message.timestamp }}</div>
</div>
</div>
<div class="message-form">
<input v-model="newMessage" type="text" placeholder="输入消息...">
<button @click="sendMessage">发送</button>
</div>
<div class="status">{{ status }}</div>
</div>
</template>
<script>
export default {
data() {
return {
ws: null,
newMessage: '',
messages: [],
status: '连接中...'
}
},
mounted() {
this.initWebSocket()
},
beforeDestroy() {
if (this.ws) {
this.ws.close()
}
},
methods: {
initWebSocket() {
const wsUri = 'ws://localhost:8090'
this.ws = new WebSocket(wsUri)
this.ws.onopen = () => {
this.status = '连接成功'
}
this.ws.onmessage = (event) => {
const message = {
text: event.data,
timestamp: new Date().toLocaleTimeString(),
type: 'received'
}
this.messages.push(message)
}
this.ws.onclose = () => {
this.status = '断开连接,正在重连...'
setTimeout(() => {
this.initWebSocket()
}, 5000)
}
this.ws.onerror = (error) => {
console.error('WebSocket错误:', error)
this.status = '连接错误,请检查服务器是否运行'
}
},
sendMessage() {
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
const message = this.newMessage.trim()
if (message) {
this.ws.send(message)
const sentMessage = {
text: message,
timestamp: new Date().toLocaleTimeString(),
type: 'sent'
}
this.messages.push(sentMessage)
this.newMessage = ''
}
} else {
alert('未连接到服务器,请稍后重试')
}
}
}
}
</script>
<style>
.chat-container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
.messages {
height: 400px;
overflow-y: auto;
margin-bottom: 20px;
}
.message {
margin: 10px 0;
padding: 10px;
border-radius: 5px;
max-width: 70%;
}
.received {
background-color: #fff;
margin-left: 20%;
}
.sent {
background-color: #e3f2fd;
margin-right: 20%;
text-align: right;
}
.timestamp {
font-size: 0.8em;
color: #666;
margin-top: 5px;
}
.message-form {
display: flex;
gap: 10px;
}
input[type="text"] {
flex-grow: 1;
padding: 8px;
}
button {
padding: 8px 16px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
.status {
margin-top: 10px;
text-align: center;
color: #666;
}
</style>
最后
