前端聊天室

admin11个月前 (04-22)it知识633
<!DOCTYPE html><html><head>  <title>Socket.IO 聊天室</title>  <script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script>  <style>    .chat-box { height: 400px; border: 1px solid #ccc; overflow-y: auto; padding: 10px; }    .message { margin: 8px 0; padding: 8px; border-radius: 4px; }    .self { background: #e3f2fd; margin-left: 20%; }    .others { background: #f5f5f5; margin-right: 20%; }    #user-list { position: fixed; right: 20px; top: 20px; background: white; padding: 10px; border: 1px solid #ddd; }  </style></head><body>  <div id="user-list"></div>  <div class="chat-box" id="chatBox"></div>  <input type="text" id="messageInput" placeholder="输入消息..." style="width: 70%">  <button onclick="sendMessage()">发送</button>  <script>    // 初始化连接    const socket = io('wss://your-chat-server.com', {      auth: { userId: localStorage.getItem('userId') || `user_${Date.now()}` },      reconnectionAttempts: 3,      transports: ['websocket']    });    // 消息发送函数    function sendMessage() {      const input = document.getElementById('messageInput');      if (input.value.trim()) {        socket.emit('chatMessage', {          text: input.value,          time: new Date().toISOString()        });        input.value = '';      }    }    // 监听服务端消息    socket.on('chatMessage', (msg) => {      const isSelf = msg.userId === socket.auth.userId;      const div = document.createElement('div');      div.className = `message ${isSelf ? 'self' : 'others'}`;      div.innerHTML = `<b>${msg.nickname}</b>: ${msg.text}<br><small>${new Date(msg.time).toLocaleTimeString()}</small>`;      document.getElementById('chatBox').appendChild(div);    });    // 用户列表更新    socket.on('userListUpdate', (users) => {      document.getElementById('user-list').innerHTML =         `<h4>在线用户 (${users.length})</h4>` +         users.map(u => `<div>${u.nickname}</div>`).join('');    });    // 连接状态管理    socket.on('connect', () => {      console.log('已连接服务器');      socket.emit('joinRoom', 'public');    });    socket.on('disconnect', () => {      console.warn('连接已断开');    });    // 回车发送    document.getElementById('messageInput').addEventListener('keypress', (e) => {      if (e.key === 'Enter') sendMessage();    });  </script></body></html>

二、核心功能说明

  1. 连接配置

    • 自动生成用户 ID 并存储于 localStorage

    • 优先使用 WebSocket 协议,失败后自动重连

  2. 消息交互

    • 支持文本消息发送与格式化时间显示

    • 消息气泡区分自己/他人(CSS 样式控制)

  3. 状态管理

    • 实时更新在线用户列表

    • 自动加入默认公共聊天室 public


三、服务端需配合实现

虽然此示例为纯前端代码,但需服务端支持以下逻辑:

  1. 处理 joinRoom 事件管理房间

  2. 广播 chatMessage 到同一房间用户

  3. 维护用户连接状态并推送 userListUpdate


四、扩展建议

  1. 历史记录
    添加 localStorage 缓存最近的 100 条消息

  2. 文件传输
    通过 socket.emit('fileUpload', base64Data) 实现(需服务端支持)

  3. 心跳检测
    增加 setInterval 发送心跳包维持连接


标签: 分享IT知识

相关文章

西山经

《西山经》华山之首曰钱来之山。其上多松,其下多洗石。有兽焉,其状如羊而马尾,名曰羬羊,其脂可以已腊。西四十五里曰松果之山,濩水出焉,北流注于渭。其中多铜。有鸟焉,其名曰[虫鸟]渠,其状如山鸡,黑身赤足...

《山海经》中的又一重要篇章---西山经

《西山经》是中国古代神话典籍《山海经》中的又一重要篇章,主要描述了西方地区的诸多山系及其中的奇珍异兽、草木矿物等。以下是对《西山经》的简要翻译概述(同样地,由于《山海经》的内容包含大量神话元素和夸张描...

前端是目前应用最广的语言

一、JavaScript 的主导地位‌核心语言地位‌JavaScript 是当前前端开发的绝对主流语言,超过 95% 的现代网站通过 JavaScript 实现动态交互功能,其语法简洁性和浏览器原生支...

前端AI项目

一、‌开发效率提升‌‌智能代码生成‌‌场景‌:根据设计稿或自然语言描述生成前端代码。‌案例‌:‌Vercel v0‌:基于AI生成React代码,支持动态调整UI组件。‌Uizard‌:将手绘草图或F...

ai项目的热度

一、资本持续涌入‌初创企业受追捧‌AI编程领域出现多起高额融资案例,例如poolside获5亿美元融资,估值达30亿美元;codeium新一轮融资后估值28.5亿美元‌去中心化创意AI平台Sogni...

人工智能能拥有人一样的智慧吗

一、本质差异:AI与人类智慧的核心区别‌技术基础与能力边界‌人工智能的“智慧”源于算法与数据,擅长处理结构化信息并执行预设规则下的任务(如医学影像分析、语言生成等),但缺乏自主意识与情感理解能力‌人类...