当前位置:首页 > 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实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…