使用 Node.js 和 Socket.io 构建可创建、可加入房间的实时聊天室
发布人:shili8
发布时间:2025-03-05 07:03
阅读次数:0
**使用 Node.js 和 Socket.io 构建可创建、可加入房间的实时聊天室**
在本文中,我们将使用 Node.js 和 Socket.io 来构建一个可创建、可加入房间的实时聊天室。这个聊天室允许用户创建新的房间,并且可以加入已经存在的房间。
**环境准备**
首先,我们需要安装必要的依赖包:
bashnpm install express socket.io
**服务器端代码**
下面是服务器端的代码:
javascript// server.jsconst express = require('express');
const app = express();
const server = require(' />const io = require('socket.io')(server);
let rooms = {};
app.use(express.static(__dirname + '/public'));
io.on('connection', (socket) => {
console.log('客户端连接');
// 当客户端创建新房间时 socket.on('createRoom', (roomName) => {
if (!rooms[roomName]) {
rooms[roomName] = [];
io.emit('newRoom', roomName);
}
});
// 当客户端加入房间时 socket.on('joinRoom', (roomName, username) => {
if (rooms[roomName]) {
rooms[roomName].push(username);
io.to(roomName).emit('newUser', username);
} else {
console.log(`房间 ${roomName}不存在`);
}
});
// 当客户端发送消息时 socket.on('sendMessage', (roomName, message) => {
if (rooms[roomName]) {
io.to(roomName).emit('newMessage', username, message);
} else {
console.log(`房间 ${roomName}不存在`);
}
});
// 当客户端断开连接时 socket.on('disconnect', () => {
console.log('客户端断开连接');
});
});
server.listen(3000, () => {
console.log('服务器启动在 />});
**客户端代码**
下面是客户端的代码:
javascript// client.jsconst socket = io.connect(' />
// 创建新房间document.getElementById('create-room').addEventListener('click', () => {
const roomName = document.getElementById('room-name').value;
socket.emit('createRoom', roomName);
});
// 加入房间document.getElementById('join-room').addEventListener('click', () => {
const roomName = document.getElementById('room-name').value;
const username = document.getElementById('username').value;
socket.emit('joinRoom', roomName, username);
});
// 发送消息document.getElementById('send-message').addEventListener('click', () => {
const roomName = document.getElementById('room-name').value;
const message = document.getElementById('message').value;
socket.emit('sendMessage', roomName, message);
});
**HTML**
下面是 HTML 的代码:
html<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>实时聊天室</title>
<style>
#room-name {
width:200px;
height:30px;
padding:10px;
font-size:16px;
border:1px solid #ccc;
}
#username {
width:200px;
height:30px;
padding:10px;
font-size:16px;
border:1px solid #ccc;
}
#message {
width:300px;
height:50px;
padding:10px;
font-size:16px;
border:1px solid #ccc;
}
#send-message {
background-color: #4CAF50;
color: #fff;
padding:10px20px;
border: none;
border-radius:5px;
cursor: pointer;
}
#create-room {
background-color: #4CAF50;
color: #fff;
padding:10px20px;
border: none;
border-radius:5px;
cursor: pointer;
}
#join-room {
background-color: #4CAF50;
color: #fff;
padding:10px20px;
border: none;
border-radius:5px;
cursor: pointer;
}
</style>
</head>
<body>
<h1>实时聊天室</h1>
<input id="room-name" type="text" placeholder="房间名称">
<button id="create-room">创建新房间</button>
<input id="username" type="text" placeholder="用户名">
<button id="join-room">加入房间</button>
<input id="message" type="text" placeholder="消息内容">
<button id="send-message">发送消息</button>
<script src="/socket.io/socket.io.js"></script>
<script src="client.js"></script>
</body>
</html>
**总结**
在本文中,我们使用 Node.js 和 Socket.io 构建了一个可创建、可加入房间的实时聊天室。这个聊天室允许用户创建新的房间,并且可以加入已经存在的房间。我们还提供了客户端和服务器端的代码示例,以及 HTML 的代码示例。

