当前位置:首页 > JavaScript

js实现在线即时聊天

2026-01-30 20:13:45JavaScript

使用WebSocket实现即时聊天

WebSocket是一种在单个TCP连接上进行全双工通信的协议,适合实时聊天应用。

// 客户端代码
const socket = new WebSocket('ws://your-server-address');

socket.onopen = () => {
    console.log('连接已建立');
    socket.send('用户加入聊天');
};

socket.onmessage = (event) => {
    const chatBox = document.getElementById('chat-box');
    chatBox.innerHTML += `<div>${event.data}</div>`;
};

function sendMessage() {
    const message = document.getElementById('message-input').value;
    socket.send(message);
}

使用Socket.io库简化开发

Socket.io是建立在WebSocket之上的库,提供了更简单的API和自动重连等功能。

js实现在线即时聊天

// 客户端
const socket = io('http://your-server-address');

socket.on('connect', () => {
    console.log('已连接');
});

socket.on('chat message', (msg) => {
    document.getElementById('chat-box').innerHTML += `<div>${msg}</div>`;
});

function sendMessage() {
    const message = document.getElementById('message-input').value;
    socket.emit('chat message', message);
}

服务器端实现(Node.js + Express)

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);

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

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

    socket.on('disconnect', () => {
        console.log('用户断开连接');
    });
});

server.listen(3000, () => {
    console.log('服务器运行在端口3000');
});

前端界面基本结构

<div id="chat-box" style="height: 300px; overflow-y: scroll;"></div>
<input id="message-input" type="text" placeholder="输入消息">
<button onclick="sendMessage()">发送</button>

实现用户身份识别

为每个连接的用户添加唯一标识和昵称。

// 服务器端
io.on('connection', (socket) => {
    socket.on('set nickname', (nickname) => {
        socket.nickname = nickname;
        io.emit('chat message', `${nickname} 加入了聊天`);
    });

    socket.on('chat message', (msg) => {
        io.emit('chat message', `${socket.nickname}: ${msg}`);
    });
});

消息历史记录功能

服务器可以存储最近的聊天记录,新用户连接时发送历史消息。

js实现在线即时聊天

const messageHistory = [];
const MAX_HISTORY = 100;

io.on('connection', (socket) => {
    socket.emit('history', messageHistory);

    socket.on('chat message', (msg) => {
        const fullMessage = `${socket.nickname}: ${msg}`;
        messageHistory.push(fullMessage);
        if (messageHistory.length > MAX_HISTORY) {
            messageHistory.shift();
        }
        io.emit('chat message', fullMessage);
    });
});

客户端优化处理

添加消息发送后的输入框清空和滚动到底部功能。

function sendMessage() {
    const messageInput = document.getElementById('message-input');
    const message = messageInput.value;
    if (message.trim()) {
        socket.emit('chat message', message);
        messageInput.value = '';
        scrollToBottom();
    }
}

function scrollToBottom() {
    const chatBox = document.getElementById('chat-box');
    chatBox.scrollTop = chatBox.scrollHeight;
}

安全性考虑

实现基本的输入过滤和验证。

// 服务器端
socket.on('chat message', (msg) => {
    if (typeof msg !== 'string' || msg.length > 500) {
        return;
    }
    const filteredMsg = msg.replace(/<[^>]*>?/gm, '');
    io.emit('chat message', `${socket.nickname}: ${filteredMsg}`);
});

部署注意事项

生产环境需要考虑HTTPS、负载均衡和WebSocket连接持久化等问题。

标签: 在线js
分享给朋友:

相关文章

css按钮在线制作

css按钮在线制作

CSS按钮在线制作工具 以下是一些可用于在线制作CSS按钮的工具和资源,帮助快速生成美观且响应式的按钮样式。 Button Generator Button Generator提供可视化编辑界面,可…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…

js实现点击效果

js实现点击效果

实现点击效果的JavaScript方法 使用addEventListener绑定点击事件 通过document.getElementById或document.querySelector获取DOM元素…

用js实现vue

用js实现vue

用 JavaScript 实现 Vue 核心功能 Vue.js 是一个渐进式框架,其核心功能包括响应式数据绑定、虚拟 DOM 和组件系统。以下是一个简化版的实现,展示如何用原生 JavaScript…