Trae Genimi3跟着官网学实时通信 Socket.io框架

作者:百万前端向前冲日期:2025/12/4

3b74cd598a4f9c785f0fa84024044a3d.jpg

图片.png socket.io/zh-CN/docs/…

第1次对话:AI满意度⭐️⭐️

AI提示词:学习socket.io 请你按照这个文档 socket.io/docs/v4/tut… 创建一个中文网站,循序渐进的学习。

图片.png

图片.png

出现这个基于Node.js的Expressv5.2框架的聊天室,有点弱了,用户进入没有提示和昵称, 我的对AI表现的满意度是 ⭐️⭐️⭐️🈳🈳,可以给半⭐️给 版本比较新。

我需要的是一个学习Socekt.io的网站

AI给我一个Socekt.io开发的项目。

第2次对话:AI满意度⭐️⭐️⭐️⭐️

我需要的是一个 HTML网页文档来学习socket.io,并不是要用socket.io生成项目。使用工具pnpm,文档左侧应该有清晰的导航列表。如果涉及代码应该彩色高亮。

图片.png

第3次对话:AI满意度⭐️⭐️⭐️⭐️

对用 socket.on( ) 或者io 自定义的通道 事件、 关键字 都用emoji表情代替 ,同时 .getElementById 都用queryselector代替。并且列举出socket.io常用功能清单 仅对这个文件,尽可能用直观的中文+emoji

图片.png

图片.png

AI文档最终成品文档

1. 简介

Socket.IO 是一个基于事件的库,用于在浏览器和服务器之间实现实时双向低延迟的通信。

核心特性:

  • HTTP 长轮询作为回退机制(保证连接稳定性)
  • 自动重连
  • 数据包缓冲
  • 广播机制

2. 环境搭建 (pnpm)

首先,我们需要初始化一个新的 Node.js 项目。这里我们使用 pnpm 作为包管理工具。

初始化项目

打开终端,创建一个新目录并进入:

1mkdir socket-chat-example
2cd socket-chat-example
3

初始化 package.jsonpnpm init

安装依赖

在根目录下创建 package.json 文件,确保依赖项使用的是最新版本(如下所示):

1{
2  "dependencies": {
3    "express": "^5.2.1",
4    "socket.io": "^4.8.1"
5  }
6}
7

我们需要安装 Express 框架和 Socket.IO 库:

1pnpm init
2

3. 创建服务器

创建 index.js 文件写入以下代码。我们需要设置一个基本的 Express 服务器,并将 Socket.IO 附加到它上面。

1// index.js 文件代码
2const express = require('express');
3const { createServer } = require('node:http');
4const { join } = require('node:path');
5const { Server } = require('socket.io');
6
7// 1. 创建 Express 实例
8const app = express();
9// 2. 创建 HTTP 服务器 (将 app 作为处理器)
10const server = createServer(app);
11// 3. 初始化 Socket.IO (传入 server)
12const io = new Server(server);
13
14// 路由:返回 HTML 文件
15app.get('/', (req, res) => {
16  res.sendFile(join(__dirname, 'index.html'));
17});
18
19// 监听连接事件 🔌
20io.on('connection', (socket) => {
21  console.log('👤 一个用户已连接');
22  
23  // 监听断开连接 
24  socket.on('disconnect', () => {
25    console.log('👋 用户已断开连接');
26  });
27});
28
29// 启动服务器
30server.listen(3000, () => {
31  console.log('🚀 服务器运行在 http://localhost:3000');
32});
33

4. 创建客户端

创建 index.html 文件。这是用户看到的聊天界面。

1<!DOCTYPE html>
2<html>
3<head>
4    <title>Socket.IO 聊天室</title>
5    <style>
6        /* 简单的样式 */
7        body { margin: 0; padding-bottom: 3rem; font-family: sans-serif; }
8        #form { background: rgba(0, 0, 0, 0.15); padding: 0.25rem; position: fixed; bottom: 0; left: 0; right: 0; display: flex; height: 3rem; box-sizing: border-box; backdrop-filter: blur(10px); }
9        #input { border: none; padding: 0 1rem; flex-grow: 1; border-radius: 2rem; margin: 0.25rem; }
10        #input:focus { outline: none; }
11        #form > button { background: #333; border: none; padding: 0 1rem; margin: 0.25rem; border-radius: 3px; outline: none; color: #fff; }
12        #messages { list-style-type: none; margin: 0; padding: 0; }
13        #messages > li { padding: 0.5rem 1rem; }
14        #messages > li:nth-child(odd) { background: #efefef; }
15    </style>
16</head>
17<body>
18    <ul id="messages"></ul>
19    <form id="form" action="">
20      <input id="input" autocomplete="off" /><button>发送</button>
21    </form>
22</body>
23</html>
24

5. 集成 Socket.IO

index.html</body> 标签之前,引入 Socket.IO 客户端脚本并初始化。

1<!-- 自动提供的 Socket.IO 客户端库 -->
2<script src="/socket.io/socket.io.js"></script>
3<script>
4  // 初始化连接 🔗
5  const socket = io();
6</script>
7

这里的 io() 默认会尝试连接当前主机。

6. 发送与接收消息

我们需要监听表单提交,将消息发送给服务器。注意这里使用了 querySelector 和 Emoji 事件名。

客户端发送 (Emit)

index.html 的 script 标签中添加:

1// 使用 querySelector 获取元素 🔍
2const form = document.querySelector('#form');
3const input = document.querySelector('#input');
4
5form.addEventListener('submit', (e) => {
6  e.preventDefault(); // 阻止表单默认提交刷新页面
7  if (input.value) {
8    // 向服务器发送 '💬 聊天消息' 事件
9    socket.emit('💬 聊天消息', input.value);
10    input.value = ''; // 清空输入框
11  }
12});
13

服务器接收

index.js 中,我们需要监听这个 Emoji 事件:

1io.on('connection', (socket) => {
2  // 监听 '💬 聊天消息' 事件
3  socket.on('💬 聊天消息', (msg) => {
4    console.log('📩 收到消息: ' + msg);
5  });
6});
7

7. 广播消息

现在的代码只能在服务器端打印消息。我们需要把消息广播给所有连接的客户端。

服务器端广播

修改 index.js

1io.on('connection', (socket) => {
2  socket.on('💬 聊天消息', (msg) => {
3    // io.emit 会发送给所有连接的客户端,包括发送者自己 📢
4    io.emit('💬 聊天消息', msg);
5  });
6});
7

客户端显示消息

index.html 中,监听服务器发回的事件:

1const messages = document.querySelector('#messages');
2
3// 监听 '💬 聊天消息' 事件
4socket.on('💬 聊天消息', (msg) => {
5  const item = document.createElement('li');
6  item.textContent = msg;
7  messages.appendChild(item);
8  window.scrollTo(0, document.body.scrollHeight); // 滚动到底部
9});
10

8. Socket.IO 常用功能清单

图片.png

9. 总结

恭喜! 你已经完成了一个基本的实时聊天应用。

关键 API 回顾:

附录:

注:差点点了自动翻译网页,官网其实有中文选项,但存在切换BUG(失效)和翻译不完整等问题。你看教程这里又是英文了。 那么跟着

图片.png

终于找到你Gemini-3-Pro(200K),得取消 Auto Mode 并且不能用 Trae Solo模式才有fab9b7c0a111a741fb37e9de10cef21a.png


Trae Genimi3跟着官网学实时通信 Socket.io框架》 是转载文章,点击查看原文


相关推荐


【鸿蒙开发案例篇】拒绝裸奔!鸿蒙6实现PDF动态加密
威哥爱编程2025/12/13

兄弟们抄起键盘!今天V哥要带大家用鸿蒙6.0的pdfService玩转PDF动态加密,让敏感文档在战场上穿隐身衣。以下基于HarmonyOS 6.0(API 21)的ArkTS实战,全程高能代码爆破,专治数据泄露不服!💣 联系V哥获取 鸿蒙学习资料 🔑 第一弹:动态加密核心战备(理论基础) 作战目标:运行时根据设备状态动态加载/更新PDF加密密钥技术依据: pdfService支持通过setEncryptConfig()对文档进行AES-256加密 加密状态可通过getSecurityH


什么?还不知道git cherry pick?
少年姜太公2025/12/21

前言 上周四在公司开发代码时,一下没注意从测试分支dev上拉了代码并进行开发,最后要上线的时候才猛然发现分支拉错了,一看gitLab上改了几十个文件,再一查发现自己拉代码拉错了😭😭😭,本来都准备下班了,结果硬是新建了一个分支,把四五个文件近1000行代码一点一点cv到新分支上,结果搞完一查才发现git有个cherry pick的命令可以直接搞完,希望jym看完这篇文章以后不要像我一样做这种一点一点cv的蠢事了😭😭😭 什么是cherry pick cherry pick顾名思义,就是樱


Nop入门:使用Excel模板生成包含图表的报表
canonical_entropy2025/12/30

讲解视频:Nop入门:使用NopReport导出Excel图表_哔哩哔哩_bilibili Nop平台内置了一个非常精简的中国式报表引擎NopReport,它可以实现商业报表引擎如FineReport和润乾报表的核心功能。NopReport很巧妙的利用Excel单元格的批注机制来存放扩展信息,可以直接使用Excel模板来作为报表模板,这样大大简化了报表制作过程,并且可以复用客户已有的各种业务表格。 在实现层面,NopReport没有使用Apache POI库,而是选择了直接使用流式接口解析Off


HarmonyOS一杯冰美式的时间 -- @Env
猫猫头啊2026/1/8

一、前言 该系列依旧会带着大家,了解,开阔一些不怎么热门的API,也可能是偷偷被更新的API,也可以是好玩的,藏在官方文档的边边角角~当然也会有一些API,之前是我们辛辛苦苦的手撸代码,现在有一个API能帮我们快速实现的,希望大家能找宝藏。 如果您有任何疑问、对文章写的不满意、发现错误或者有更好的方法,欢迎在评论、私信或邮件中提出,非常感谢您的支持。🙏 二、@Env的诞生背景 OK,步入正题把,在多设备开发的场景中,我们经常需要根据不同的设备环境(比如窗口大小、横竖屏等)来调整UI布局。以前我


Django 踩坑记:OceanBase 4012 Timeout 两条红线,语句超时 vs 事务超时一次讲透
哈里谢顿2026/1/16

一、4012 是谁抛的? Django 本身没有 4012 错误码,它是 OceanBase 的“杀手”信号: 当前 SQL 或 当前事务累计执行时间 ≥ 系统阈值,直接返回 4012。 二、两条红线长啥样? 变量名默认阈值计时对象触发后果ob_query_timeout10 000 000 µs = 10 s单条 SQL 执行时长这条语句被杀,事务可继续ob_trx_timeout100 000 000 µs = 100 s事务 begin→


VS code 类产物中 win11 终端字体内容和颜色 加粗不匹配问题
小兵张健2026/1/24

我尝试了各种方式,换字体,改配置,结果还是乱的,有人知道怎么搞吗?跪求,Mac好像天然就没问题,急急急大佬们


自己搭邮件服务器有多难?我用 Mailu 跑通了整套企业邮箱
GetcharZp2026/2/3

从“为什么要自建邮箱”讲起,拆解 Mailu 的架构、优缺点,以及普通人也能照着做的安装实战。 Github:github.com/Mailu/Mailu 官网:mailu.io/ 这几年,越来越多团队开始重新审视一件事:邮箱,到底要不要掌握在自己手里? 用第三方企业邮箱当然省事,但账号封禁、功能限制、隐私不可控的问题,一旦遇到,几乎没有回旋余地。于是,自建邮件服务器这件事,又被不少技术团队重新捡了起来。 而在一堆方案里,Mailu 是被频繁提到的一个名字。 Mailu 是什么?一句话先讲明


git pull拉取的时候碰到报错:error: 您对下列文件的本地修改将被合并操作覆盖 请在合并前提交或贮藏您的修改。
skywalk81632026/2/11

git pull拉取的时候碰到报错: error: 您对下列文件的本地修改将被合并操作覆盖:         data/processed/acnes_related_data.csv         data/processed/activity_data.csv         data/processed/hemolytic_data.csv         data/raw/active_peptides.csv         data/raw/hemolytic.csv      


ThreadForge v1.1.0 发布:让 Java 并发更接近 Go 的开发体验
一只叫煤球的猫2026/2/20

正好春节放假,自驾去了陕西、河南、安徽,一路上走走停停。 白天基本在路上,晚上在酒店或者服务区休息时,抽一些时间继续打磨 ThreadForge。 一点点补了个 v1.1.0 出来。 仍然保持 ThreadForge 的目标: 让 Java 能写出更简单、更可推理、更可观测的并发代码。 这次版本,重点补齐了并发开发里几个还算常见的能力。 v1.1.0 核心更新 Retry Policy(失败重试) 支持 scope 级默认重试,也支持任务级覆盖,不再到处手写 while/try-catch


Node.js 安装与配置完全指南:从零开始搭建开发环境
张3蜂2026/2/28

目录 引言 第一部分:Node.js 简介与版本选择 1.1 什么是 Node.js? 1.2 Node.js 版本介绍 第二部分:Node.js 安装方式详解 2.1 方式一:官方安装包(最简单,适合初学者) Windows/macOS 安装步骤: 2.2 方式二:包管理器安装(适合 Linux 用户) Ubuntu/Debian 系统安装步骤: CentOS/RHEL 系统安装步骤: macOS 使用 Homebrew 安装: 2.3 方式三:使用 NVM 安装(最推

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客