当前位置:首页 > 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实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…