首页
学习
活动
专区
圈层
工具
发布

《解构WebSocket断网重连:指数退避算法的前端工业级实践指南》

;随着重连失败次数增加,间隔指数级拉长,默认“当前网络可能处于长期不稳定状态”,减少无效请求。...例如,“1006(异常断连,多为网络原因)”“1011(服务器临时错误)”属于可重连场景,而“4001(身份验证失败)”“403(权限不足)”则属于不可重连场景。...若不对断连原因甄别,盲目触发重连,不仅无法成功,还会浪费资源。因此,前端需要通过WebSocket的关闭事件获取关闭码,建立“可重连场景白名单”,仅在符合条件时启动指数退避流程。...当设备处于离线状态时,无需执行重连流程,而是监听online事件,一旦恢复在线,立即以初始间隔发起第一次重连,避免在离线时发起无效请求。...技术团队基于指数退避算法重构重连机制,首先明确可重连场景:将关闭码1006、1011纳入白名单,4001、403则引导用户重新登录。

49410

websocket关闭指定原因

异常关闭 (1006) 常见于网络问题或客户端断开。可以设置重连机制来保持连接的稳定性。 协议错误 (1002) 当客户端发送了不符合协议的数据时,服务端可以选择断开连接。...为什么会收到 1006 状态? 1006 是由客户端生成的关闭码,通常用于无法与服务端正常通信的场景(例如网络中断)。建议在服务端日志中查看异常原因。 2. 如何向客户端发送自定义关闭状态?...在连接关闭后实现自动重连。 在关闭前提示用户保存未完成的数据。 状态码一览: 1000 - NORMAL 含义: 连接正常关闭,表明 WebSocket 通信已完成。...应用场景: 一般用于表示关闭帧中没有状态码,不能直接使用。 1006 - NO_CLOSE_FRAME 含义: 连接非正常关闭,例如未发送关闭帧。 应用场景: 网络中断、客户端或服务端崩溃等。...扩展状态码 4500 - SESSION_NOT_RELIABLE 含义: 会话变得不可靠,例如在超时发送消息时。 应用场景: 服务器检测到会话不稳定时可主动关闭连接。

2.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    常见HTTPFTPWebSockets状态码大全

    403 - 禁止访问 403.1 - 执行访问被禁止。 403.2 - 读访问被禁止。 403.3 - 写访问被禁止。 403.4 - 要求 SSL。 403.5 - 要求 SSL 128。...502 - 错误网关,Web 服务器用作网关或代理服务器时收到了无效响应。 503 - 服务不可用,这个错误代码为 IIS 6.0 所专用。...WebSockets状态码 WebSockets 的CloseEvent 会在连接关闭时发送给使用 WebSockets 的客户端。它在 WebSocket 对象的 onclose 事件监听器中使用。...表示没有收到预期的状态码。 1006 CLOSE_ABNORMAL 保留。 用于期望收到状态码时连接非正常关闭 (也就是说, 没有发送关闭帧)。...[Ref] 1014 - 由 WebSocket 1015 TLS Handshake 保留。 表示连接由于无法完成 TLS 握手而关闭 (例如无法验证服务器证书)。

    7.8K32

    FastAPI实战:WebSocket长连接保持与心跳机制,从入门到填坑

    ##摘要本文通过一个真实的上线案例,详细讲解FastAPI与JavaScript实现WebSocket长连接保持的心跳机制。...——中间件超时、网络状态变化*心跳原理:ping-pong还是pong-ping?...*FastAPI后端:接收心跳消息+超时管理*JavaScript前端:定时发送心跳+断线重连*完整可运行代码示例*那些年我踩过的坑(间隔设置、重复定时器、服务端主动断开)##第一部分:连接为什么会断?...因为客户端更能感知网络变化,且断开后能立即重连。下面我就以客户端发心跳为例,上代码。##⚙️第三部分:FastAPI后端实战先搭一个最简单的FastAPIWebSocket端点。...*坑3:重连时忘记清理旧定时器——每次重连都新建一个setInterval,导致多个心跳线程并发,消息爆炸。解决方案:重连前先stopHeartbeat()。

    16410

    使用 Python 实现 MCP Server

    管理 代码示例:websocket_manager.py from typing import Dict, Any, Set from fastapi import WebSocket class...路由 代码示例:websocket.py from fastapi import APIRouter, WebSocket, WebSocketDisconnect from app.services.websocket_manager...: WebSocket, connection_id: str = None): """WebSocket 端点""" if not connection_id: # 生成唯一连接...7.3.2 性能问题 问题:MCP Server 性能不佳,无法处理大量并发请求。 解决方案: 使用异步编程:将同步代码改为异步代码,提高并发处理能力。...使用调试工具:使用 VS Code 或 PyCharm 的调试功能,调试代码。 监控指标:实现完善的监控指标,监控系统性能和状态。 单元测试和集成测试:编写单元测试和集成测试,提前发现问题。

    57510

    常见状态码

    HTTP 状态码 1xx:指示信息–表示请求已接收,继续处理 2xx:成功–表示请求已被成功接收、理解、接受 3xx:重定向–要完成请求必须进行更进一步的操作 4xx:客户端错误–请求有语法错误或请求无法实现...未授权 验证失败,详细的错误信息会说明原因 403 服务器拒绝请求 被拒绝调用,详细的错误信息会说明原因 404 未找到 服务器找不到请求的地址 405 方法禁用 群容量超出上限,禁止调用...App 被锁定或删除 App 被锁定或删除 401 1007 被限制调用 该方法被限制调用,详细的描述信息会说明 401 1008 调用频率超限 调用频率超限,详细的描述信息会说明,广播消息未开通时也会返回此状态码...403 1050 内部服务超时 内部服务响应超时 504 2007 测试用户数量超限 测试用户数量超限 403 Android、iOS 状态码 下面列举了 SDK 使用过程中,可能遇上的错误码...ATS 默认只使用 HTTPS 协议,当 HTTP 协议被禁止时 SDK 会一直 30004 错误。您可以在我们 iOS 开发文档中搜索到 ATS 设置。 30007 导航 HTTP 请求失败。

    3.5K30

    【译】 WebSocket 协议第七章——关闭连接(Closing the Connection)

    在底层的 TCP 连接中,通常大多数情况下,服务端应该先关闭,所以是服务端而不是客户端保持 TIME_WAIT 状态(因为客户端先关闭的话,这会阻止服务端在2 MSL 内重新打开这条连接,而如果服务器处于...如果WebSocket 已经关闭并且终端没有收到任何的关闭帧(例如发生了可能底层的传输连接突然丢失的情况),那么WebSocket 关闭状态码被默认为1006。...终端在接到WebSocket 连接失效的指令后,不能继续尝试处理来自另一端的数据(包括响应的关闭帧)。...1006 1006 是一个保留值并且不能被终端当做一个关闭帧的状态码。这个状态码是为了给上层应用表示连接被异常关闭如没有发送或者接受一个关闭帧这种场景的使用而设计的。...1009 1009 表示终端由于收到了一个太大的消息无法进行处理从而关闭连接。

    7.5K20

    WebSocket断开原因、心跳机制防止自动断开连接

    1、断开原因 WebSocket断开的原因有很多,最好在WebSocket断开时,将错误打印出来。...) console.log(e) } 错误状态码: WebSocket断开时,会触发CloseEvent, CloseEvent会在连接关闭时发送给使用 WebSockets 的客户端....表示没有收到预期的状态码. 1006 CLOSE_ABNORMAL 保留....用于期望收到状态码时连接非正常关闭 (也就是说, 没有发送关闭帧). 1007 Unsupported Data 由于收到了格式不符的数据而断开连接 (如文本消息中包含了非 UTF-8 数据). 1008...表示连接由于无法完成 TLS 握手而关闭 (例如无法验证服务器证书). 1016–1999 由 WebSocket标准保留以便未来使用. 2000–2999 由 WebSocket拓展保留使用. 3000

    20.8K40

    56. vLLM 核心模块逐文件:api_server.py

    2.4 WebSocket支持 vLLM API服务器支持WebSocket协议,实现流式输出: 实时流式生成:支持边生成边返回的流式输出,提高用户体验 双向通信:支持服务器和客户端之间的双向通信 断线重连...:支持WebSocket连接的断线重连机制 WebSocket支持使得vLLM API服务器能够提供更流畅的用户体验,特别是在长文本生成场景中。...() WebSocket支持具有以下特点: 实时流式输出:支持边生成边返回的流式输出 双向通信:支持服务器和客户端之间的双向通信 低延迟:减少HTTP请求的开销,降低延迟 断线重连:支持WebSocket...支持 支持 有限支持 支持 有限支持 有限支持 流式输出 WebSocket SSE + WebSocket WebSocket SSE 支持 支持 分析:vLLM API Server采用FastAPI...社区活跃:vLLM API Server的社区活跃度高,GitHub星数和贡献者数量均处于领先地位。

    15510

    MCP Server 最小实现(Hello MCP)

    :用于构建 HTTP 和 WebSocket 服务器 uvicorn:用于运行 FastAPI 应用 pydantic:用于数据验证和序列化 代码示例:安装依赖 # 安装 fastapi 和 uvicorn...端点实现: 根路径:返回服务器状态 能力协商端点:返回服务器支持的版本、协议和工具 工具调用端点:处理工具调用请求并返回结果 WebSocket 端点:处理 WebSocket 连接和消息 3.4...代码示例:完整的最小实现代码 from fastapi import FastAPI, WebSocket, WebSocketDisconnect from pydantic import BaseModel...错误恢复:最小实现缺乏错误恢复机制,在出现故障时可能无法自动恢复。 日志记录:最小实现缺乏详细的日志记录,难以调试和监控。 测试覆盖:最小实现缺乏完整的测试用例,可能存在未发现的 bug。 6....扩展代码示例:添加 API Key 认证和工具参数验证的代码示例。 常见问题与解决方案:运行 MCP Server 时可能遇到的问题及解决方案。

    83240

    《透视http协议》笔记

    “403 Forbidden”实际上不是客户端的请求出错,而是表示服务器禁止访问资源。...例如信息敏感、法律禁止等 “404 Not Found”表示资源在本服务器上未找到,所以无法提供给客户端 5××:服务器错误,服务器在处理请求时内部发生了错误; “500 Internal Server...,表示服务器自身工作正常,访问后端服务器时发生了错误 “503 Service Unavailable”表示服务器当前很忙,暂时无法响应服务 3.读懂http的body 客户端用 Accept 头告诉服务器希望接收什么样的数据...还是会发生“队头阻塞”,这是TCP协议固有的) QUIC 是一个新的传输层协议,建立在 UDP 之上,换掉了TCP,实现了可靠传输 QUIC 内含了 TLS1.3,只能加密通信,支持 0-RTT 快速建连...头注入:在“Host”“User-Agent”“X-Forwarded-For”等字段里加入了恶意数据或代码,服务端程序如果解析不当,就会执行预设的恶意代码 “跨站脚本”(XSS)攻击:它属于“JS 代码注入

    71320

    常见 MCP 设计反模式总结

    难以扩展 无法支持动态添加工具,限制了系统的扩展性 严重 维护成本高 工具逻辑与业务逻辑耦合,代码复杂度随工具数量线性增长 严重 版本管理困难 无法实现工具的版本控制和灰度发布 中等 3.1.4 最佳实践...3.5.2 代码示例:状态管理混乱 // 反模式:状态管理混乱 class McpServer { constructor() { this.connections = [];...严重 性能优化困难 没有指标,无法知道系统瓶颈在哪里 中等 安全事件无法追溯 没有审计日志,无法追查安全事件 严重 系统可靠性差 无法监控系统状态,无法及时发现问题 严重 3.7.4 最佳实践:完善的可观测性...:遵循安全最佳实践 # 最佳实践:遵循安全最佳实践 from fastapi import FastAPI, Depends, HTTPException from fastapi.security import...官方文档:FastAPI 是一个现代、快速(高性能)的 Python Web 框架,常用于构建 MCP Server WebSocket 安全指南:Mozilla 发布的 WebSocket 安全指南

    15210

    解密与探究:理解WebSocket协议与报文格式

    客户端脚本被迫维护从出站连接到入站连接的映射,以跟踪回复。更简单的解决方案是在两个方向上使用单个 TCP 连接进行通信。这就是 WebSocket 协议所提供的。...2.2 服务端握手响应当服务端收到握手请求时,将发送一个特殊响应,该响应表明协议将从 HTTP 变更为 WebSocket。...(注意,无论 WebSocket 协议是否运行在 TLS 上,都需要进行掩码处理。)服务端在收到未进行掩码处理的帧时,必须关闭连接。在这种情况下,服务端可以发送状态码为 1002(协议错误)的关闭帧。.../wsenv/bin/activatepip3 install 'uvicorn[standard]' fastapi4.2 服务端代码ws_server.py:from typing import Listfrom...fastapi import FastAPI, WebSocket, WebSocketDisconnect, Requestfrom fastapi.responses import HTMLResponseimport

    3.3K21

    WebSocket :用WebSocket实现推送你必须考虑的几个问题

    目录: 目录 WebSocket简介 项目背景硬件环境及客户端支持 本文研究内容 基于javaxwebsocket服务端代码源码后续补充git连接 客户端代码 问题探索 8月3日补充 中间线路断网情况...服务端第三方库 :javax.websocket 3.本文研究内容 应用的线上环境后各种异常情况处理: 使用WebSocket时,依赖TCP keepalive还是做业务层心跳 服务器如何感知客户端断开...(用以查看实时用户在线状态) 客户端如何感知服务端异常(用以决定客户端何时重连) 4.基于javax.websocket服务端代码(源码后续补充git连接) WebSocketServer.java package...原因有以下几个:1.client异常挂死,此时keepalive机制无法反馈真实的client状态; 2.client 异常断电断网出现TCP假死keepalive并不能根本性解决问题,实际上互联网环境很不稳定...session已经断开时不要忘记通知ws close掉这个session,不然有可能出现大量服务端TCP假死.接下来说重连,大家要注意重连对于server是来讲是一个新的连接,大家可以通过断网重连后server

    2.1K20

    前端 实战项目·WebSocket 心跳重连机制

    WebSocket 的优势: 较少的控制开销 更强的实时性 保持连接状态 更好的二进制支持 可以支持扩展 更好的压缩效果 WebSocket 最大的优势就是能够保持前后端消息的长连接,但是在某些情况下,...例如用户网络断开,并不会触发 websocket 的任何事件函数,这个时候如果发送消息,消息便无法发送出去,浏览器会立刻或者一定短时间后(不同浏览器或者浏览器版本可能表现不同)触发 onclose 函数...心跳重连 通过以上分析,可以得到实现心跳重连的关键是按时发送心跳消息和检测响应消息并判断是否进行重连,所以首先设置 4 个小目标: 可以按一定间隔发送心跳包 连接错误或者关闭时能够自动重连 若在一定时间间隔内未接收消息...需要注意的是每次进行重连时加锁,避免进行无效重连,同时在每次接收消息时,清除最长间隔消息重连定时器,能接收消息说明连接正常,不需要重连。...这里将最终完成代码上传到 Github,并将其封装上传到 npm 以便今后在项目中使用, 有兴趣可以尝试一下 websockethb 。

    5.4K21

    《MCP + Pydantic + FastAPI:构建可审计、可治理的 AI 工具链——测开工程师的工程化落地指南》

    三、权限控制:别让 AI 成为“越权访问者” MCP 最大的价值之一,是 把权限判断从 Prompt 移回后端代码。但具体怎么做?...prefix="/mcp/customer") 3@customer_service_mcp.tool() 4def query_order_status(...): ... 5 6# 运维角色可查服务器状态...11async def permission_error_handler(request, exc): 12 return JSONResponse( 13 status_code=403...Pydantic 模型 敏感数据字段显式过滤(最小权限原则) 每个 Tool 内置用户权限校验 完整调用日志(含输入、输出、耗时、用户) 异常分类处理,返回友好错误 多环境配置隔离,生产环境严格白名单 禁止自动写库...当你下次接到“让 AI 帮我们查数据”的需求时,请不要直接拼 SQL,而是反问一句: “我们需要暴露哪些能力?谁有权使用?如何审计?” 这才是工程化的开始。

    24010
    领券