当前位置:首页 > JavaScript

js 实现聊天

2026-04-06 17:08:41JavaScript

实现 WebSocket 基础聊天

WebSocket 是实现实时聊天的核心技术,以下是一个基础实现示例:

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

socket.onopen = () => {
  console.log('连接已建立');
  socket.send('Hello Server!');
};

socket.onmessage = (event) => {
  console.log('收到消息:', event.data);
  // 将消息显示在聊天界面
  document.getElementById('chat').innerHTML += `<div>${event.data}</div>`;
};

// 发送消息函数
function sendMessage() {
  const message = document.getElementById('message').value;
  socket.send(message);
}

使用 Socket.IO 库

Socket.IO 提供了更强大的功能,包括自动重连和房间支持:

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

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

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

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

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

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

const app = express();
const server = app.listen(3000);
const io = socketIo(server);

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

  socket.on('chat message', (msg) => {
    io.emit('chat message', msg); // 广播给所有客户端
  });
});

添加用户身份标识

为消息添加发送者信息:

// 客户端发送
socket.emit('chat message', {
  user: '用户名',
  text: message,
  time: new Date()
});

// 服务器广播
socket.on('chat message', (data) => {
  io.emit('chat message', data);
});

// 客户端接收
socket.on('chat message', (data) => {
  const messageHTML = `
    <div class="message">
      <span class="user">${data.user}</span>
      <span class="text">${data.text}</span>
      <span class="time">${formatTime(data.time)}</span>
    </div>
  `;
  chatContainer.innerHTML += messageHTML;
});

实现私聊功能

// 服务器端
socket.on('private message', ({ to, message }) => {
  io.to(to).emit('private message', {
    from: socket.id,
    message
  });
});

// 客户端
function sendPrivateMessage() {
  const toUserId = document.getElementById('recipient').value;
  const message = document.getElementById('message').value;
  socket.emit('private message', {
    to: toUserId,
    message
  });
}

添加消息持久化

使用数据库存储聊天记录:

// 使用MongoDB示例
const Message = require('./models/Message');

io.on('connection', (socket) => {
  socket.on('chat message', async (data) => {
    // 保存到数据库
    const message = new Message({
      user: data.user,
      text: data.text,
      time: new Date()
    });
    await message.save();

    // 广播消息
    io.emit('chat message', data);
  });
});

前端界面优化

基础聊天界面HTML结构:

js 实现聊天

<div id="chat-container">
  <div id="messages"></div>
  <input type="text" id="message-input" placeholder="输入消息...">
  <button id="send-button">发送</button>
</div>

<style>
  #chat-container {
    width: 400px;
    margin: 0 auto;
  }
  #messages {
    height: 300px;
    overflow-y: scroll;
    border: 1px solid #ccc;
    padding: 10px;
    margin-bottom: 10px;
  }
  .message {
    margin-bottom: 8px;
  }
  .user {
    font-weight: bold;
    margin-right: 5px;
  }
  .time {
    color: #666;
    font-size: 0.8em;
    margin-left: 5px;
  }
</style>

标签: js
分享给朋友:

相关文章

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…