前端WebSocket实战:别再只会用HTTP了

前端WebSocket实战:别再只会用HTTP了

前端WebSocket实战:别再只会用HTTP了

毒舌时刻

这代码写得跟网红滤镜似的——仅供参考。

各位前端同行,咱们今天聊聊前端WebSocket。别告诉我你还在用轮询获取实时数据,那感觉就像每隔一分钟就去敲门问"好了没"——烦人又低效。

为什么你需要WebSocket

最近看到一个项目,实时聊天功能用轮询实现,每秒请求一次服务器,我差点当场去世。我就想问:你是在做实时通信还是在做DDoS攻击?

反面教材

// 反面教材:轮询获取数据 function startPolling() { setInterval(async () => { const response = await fetch('/api/messages'); const messages = await response.json(); updateMessages(messages); }, 1000); // 每秒请求一次 } // 服务器:求放过 // 带宽:我扛不住了 

毒舌点评:这代码,我看了都替你的服务器着急。每秒轮询一次,你是想让服务器变成蜜蜂吗?

前端WebSocket的正确姿势

1. 基础WebSocket使用

// 正确姿势:基础WebSocket class WebSocketClient { constructor(url) { this.url = url; this.ws = null; this.reconnectAttempts = 0; this.maxReconnectAttempts = 5; this.listeners = new Map(); } connect() { this.ws = new WebSocket(this.url); this.ws.onopen = () => { console.log('WebSocket连接成功'); this.reconnectAttempts = 0; this.emit('open'); }; this.ws.onmessage = (event) => { const data = JSON.parse(event.data); this.emit(data.type, data.payload); }; this.ws.onclose = () => { console.log('WebSocket连接关闭'); this.emit('close'); this.reconnect(); }; this.ws.onerror = (error) => { console.error('WebSocket错误:', error); this.emit('error', error); }; } send(type, payload) { if (this.ws && this.ws.readyState === WebSocket.OPEN) { this.ws.send(JSON.stringify({ type, payload })); } } on(event, callback) { if (!this.listeners.has(event)) { this.listeners.set(event, []); } this.listeners.get(event).push(callback); } emit(event, data) { if (this.listeners.has(event)) { this.listeners.get(event).forEach(callback => callback(data)); } } reconnect() { if (this.reconnectAttempts < this.maxReconnectAttempts) { this.reconnectAttempts++; console.log(`尝试重连... (${this.reconnectAttempts}/${this.maxReconnectAttempts})`); setTimeout(() => this.connect(), 3000); } } disconnect() { if (this.ws) { this.ws.close(); } } } // 使用 const ws = new WebSocketClient('wss://api.example.com/ws'); ws.on('open', () => { console.log('连接成功'); }); ws.on('message', (data) => { console.log('收到消息:', data); }); ws.connect(); 

2. React中使用WebSocket

// 正确姿势:React中使用WebSocket import { useEffect, useRef, useState, useCallback } from 'react'; function useWebSocket(url) { const [isConnected, setIsConnected] = useState(false); const [messages, setMessages] = useState([]); const ws = useRef(null); useEffect(() => { ws.current = new WebSocket(url); ws.current.onopen = () => setIsConnected(true); ws.current.onclose = () => setIsConnected(false); ws.current.onmessage = (event) => { const data = JSON.parse(event.data); setMessages(prev => [...prev, data]); }; return () => { ws.current.close(); }; }, [url]); const sendMessage = useCallback((message) => { if (ws.current && ws.current.readyState === WebSocket.OPEN) { ws.current.send(JSON.stringify(message)); } }, []); return { isConnected, messages, sendMessage }; } // 使用 function ChatRoom() { const { isConnected, messages, sendMessage } = useWebSocket('wss://chat.example.com'); const [input, setInput] = useState(''); const handleSend = () => { sendMessage({ type: 'chat', content: input }); setInput(''); }; return ( <div> <div>状态: {isConnected ? '已连接' : '未连接'}</div> <div className="messages"> {messages.map((msg, i) => ( <div key={i}>{msg.content}</div> ))} </div> <input value={input} onChange={e => setInput(e.target.value)} /> <button onClick={handleSend}>发送</button> </div> ); } 

3. 使用Socket.io

// 正确姿势:使用Socket.io import { io } from 'socket.io-client'; const socket = io('https://api.example.com', { transports: ['websocket'], autoConnect: true, reconnection: true, reconnectionAttempts: 5, reconnectionDelay: 3000 }); // 连接事件 socket.on('connect', () => { console.log('连接成功, ID:', socket.id); }); // 断开连接 socket.on('disconnect', () => { console.log('连接断开'); }); // 监听消息 socket.on('message', (data) => { console.log('收到消息:', data); }); // 发送消息 socket.emit('chat message', { text: 'Hello' }); // 加入房间 socket.emit('join room', 'room-1'); // 离开房间 socket.emit('leave room', 'room-1'); 

毒舌点评:早这么写,你的实时通信早做好了。别告诉我你还在用轮询,那你还是趁早去用短信吧。

实战技巧:WebSocket指南

1. WebSocket使用场景

  • 实时聊天:即时通讯
  • 实时数据:股票、比分
  • 协同编辑:多人协作
  • 在线游戏:实时对战

2. 最佳实践

  1. 重连机制:断线自动重连
  2. 心跳检测:保持连接活跃
  3. 消息确认:确保消息送达
  4. 错误处理:优雅处理异常

最后想说的

WebSocket不是新技术,是实时通信的标准。别再只会用HTTP了——WebSocket一下,你的应用会实时起来。

WebSocket就像电话,HTTP就像写信。紧急的事打电话,不急的事写信。别什么事都写信,学会打电话。

Read more

开源大模型涨价策略分析:Llama 3.5 与 GLM-5 的商业化博弈

2026年2月12日,智谱AI宣布GLM Coding Plan套餐涨价30%起,同期Meta Llama 3.5的商业授权也在悄然提价。这场看似突然的涨价潮,实则是AI产业从技术狂热转向价值理性的历史性转折。当开发者习惯了"补贴式"廉价API后,涨价公告如同警钟,宣告开源大模型商业化博弈进入深水区。 行业背景:供需逆转下的价格逻辑重构 过去两年中国大模型产业深陷惨烈"百模大战"。字节豆包曾将API定价压至0.0008元/千tokens的行业冰点,阿里通义千问GPT-4级模型降价97%,整个市场陷入"谁先涨价谁就输"的囚徒困境,企业靠融资补贴维持运营。 2026年供需关系根本逆转: 1. Agent需求爆发:大模型从聊天玩具变为生产力工具,GLM Coding Plan上线即售罄 2. 企业付费意愿提升:智谱企业级客户贡献六成毛利,AI工具ROI清晰可见 3. 算力通胀传导:从英伟达B200涨价、存储成本上升到云服务提价(AWS、

【Matlab】最新版2025a发布,深色模式、Copilot编程助手上线!

【Matlab】最新版2025a发布,深色模式、Copilot编程助手上线!

文章目录 * 一、软件安装 * 1.1 系统配置要求 * 1.2 安装 * 二、新版功能探索 * 2.1 界面图标和深色主题 * 2.2 MATLAB Copilot AI助手 * 2.3 绘图区升级 * 2.4 simulink * 2.5 更多 🟠现在可能无法登录或者注册mathworks(写这句话的时间:2025-05-20): 最近当你登录或者注册账号的时候会显示:no healthy upstream,很多人都遇到了这个问题,我在reddit上看到了mathworks官方的回答:确实有这个问题,正在恢复,不知道要几天咯,大家先用旧版本吧。 — 已经近10天了,原因是:遭受勒索软件攻击 延迟一个月,终于发布了🤭。 一、软件安装 1.1

学术家AI(PaperWW)——最新AI论文写作、AI降重、降低aigc的网站

学术家AI(PaperWW)——最新AI论文写作、AI降重、降低aigc的网站

学术家AI(PaperWW)——最新AI论文写作、AI降重、降低aigc的网站 一、PaperWW高校合作查重系统——智能学术诚信守护者 核心科技,精准查重 采用第六代A-自然语言处理技术,基于9亿篇文献的庞大数据池,实现深度语义分析与精准查重,有效识别学术雷同,保障成果原创性。 全流程学术支持 智能查重:一键检测,快速定位重复内容,提供详细溯源报告; 自动降重:AI智能改写,优化表达逻辑,降低重复率同时保留核心观点; AIGC辅助:支持AI生成内容检测与优化,适应学术新趋势; 高效工具集:PPT生成、论文速成等功能,助力学术创作提效。 高校合作优选 专为学术场景设计,覆盖论文、报告、课题材料等多场景检测需求,数据安全可靠,操作便捷,成为高校师生信赖的学术助手。 二、PaperWW论文助手——精准查重,轻松降重 三版可选,满足全阶段学术需求 �� 版本对比,一键选择 免费版 �� 价格:0元/

5款开源PPT生成大模型实测对比:从ChatGPT到文心一言,哪款最适合你?

5款开源PPT生成大模型深度评测:从技术原理到实战效果 在数字化办公时代,PPT制作已成为职场人士的日常必修课。传统PPT制作流程耗时费力,从内容构思到排版设计往往需要数小时甚至更长时间。而随着AI技术的快速发展,开源大模型正在彻底改变这一局面——只需简单指令,AI就能在几分钟内生成结构完整、设计专业的演示文稿。本文将聚焦5款最具代表性的开源PPT生成工具,从技术架构、生成效果到适用场景进行全面对比,帮助技术从业者和内容创作者找到最适合自己的生产力利器。 1. 开源PPT生成技术概览 PPT生成AI的核心在于将自然语言指令转化为结构化视觉呈现,这背后涉及三大关键技术模块: 1. 内容理解引擎:基于大语言模型(LLM)解析用户输入的文本指令,提取关键信息并组织成逻辑连贯的叙述结构 2. 设计适配系统:根据内容类型自动匹配最佳版式,包括布局、配色、字体等视觉元素 3. 文档生成组件:将结构化内容与设计模板融合,输出标准PPT文件格式(如.pptx) 当前主流开源方案主要分为两类架构: 架构类型代表模型核心优势典型适用场景API调用型ChatGPT-PPT生成质量高需