当前位置:首页 > JavaScript

js实现多人聊天

2026-04-07 13:42:05JavaScript

实现多人聊天室的基本步骤

使用 WebSocket 技术可以实现实时多人聊天功能。以下是一个基于 Node.js 和 Socket.io 的实现方案:

服务端搭建(Node.js + Socket.io)

安装依赖:

js实现多人聊天

npm install express socket.io

创建服务端代码(server.js):

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = socketIo(server);

app.use(express.static('public'));

io.on('connection', (socket) => {
    console.log('新用户连接');

    socket.on('join', (username) => {
        socket.username = username;
        io.emit('message', { user: '系统', text: `${username} 加入了聊天室` });
    });

    socket.on('chat message', (msg) => {
        io.emit('message', { user: socket.username, text: msg });
    });

    socket.on('disconnect', () => {
        if (socket.username) {
            io.emit('message', { user: '系统', text: `${socket.username} 离开了聊天室` });
        }
    });
});

server.listen(3000, () => {
    console.log('服务器运行在 http://localhost:3000');
});

客户端实现

创建HTML文件(public/index.html):

js实现多人聊天

<!DOCTYPE html>
<html>
<head>
    <title>多人聊天室</title>
    <style>
        #messages { list-style-type: none; margin: 0; padding: 0; }
        #messages li { padding: 8px 16px; }
        #messages li:nth-child(odd) { background: #eee; }
    </style>
</head>
<body>
    <ul id="messages"></ul>
    <form id="form" action="">
        <input id="username" autocomplete="off" placeholder="输入用户名" />
        <input id="input" autocomplete="off" placeholder="输入消息" />
        <button>发送</button>
    </form>

    <script src="/socket.io/socket.io.js"></script>
    <script>
        const socket = io();
        const form = document.getElementById('form');
        const input = document.getElementById('input');
        const usernameInput = document.getElementById('username');
        const messages = document.getElementById('messages');

        usernameInput.addEventListener('change', () => {
            if (usernameInput.value) {
                socket.emit('join', usernameInput.value);
                usernameInput.disabled = true;
            }
        });

        form.addEventListener('submit', (e) => {
            e.preventDefault();
            if (input.value) {
                socket.emit('chat message', input.value);
                input.value = '';
            }
        });

        socket.on('message', (data) => {
            const item = document.createElement('li');
            item.textContent = `${data.user}: ${data.text}`;
            messages.appendChild(item);
            window.scrollTo(0, document.body.scrollHeight);
        });
    </script>
</body>
</html>

运行聊天室

启动服务器:

node server.js

打开多个浏览器窗口访问 http://localhost:3000 即可测试多人聊天功能。

功能扩展建议

  1. 添加私聊功能:可以通过特定命令实现用户间私密消息
  2. 用户列表显示:维护在线用户列表并实时更新
  3. 消息历史记录:将消息存储到数据库实现历史查询
  4. 房间功能:允许用户创建和加入不同主题的聊天室
  5. 文件共享:扩展支持图片和文件传输

这个实现使用了Socket.io库,它封装了WebSocket并提供了更简单的API和自动重连等功能,适合快速开发实时应用。

标签: js
分享给朋友:

相关文章

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…