You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony多Mercure订阅线上部署后AJAX请求卡顿问题求助

排查Mercure订阅导致线上AJAX卡顿的实用方案

核心排查方向

本地正常、换Web服务器无改善,问题基本锁定在Mercure Hub的线上配置或网络层面,按以下步骤逐一排查:

1. 先查CORS配置

线上跨域限制比本地严格,Mercure默认规则可能未覆盖你的线上域名:

  • 打开Mercure配置文件(mercure.yaml或启动参数),确保CORS_ALLOWED_ORIGINS包含你的线上域名,比如https://your-app-domain.com,临时测试可设为*(生产环境禁用此设置)
  • 打开浏览器控制台的Network面板,检查Mercure的SSE请求是否存在CORS报错,或是长期处于pending状态

2. 确认Mercure的SSL/协议配置

本地使用http协议,线上若启用https,需确保Mercure的证书配置正确:

  • 若Mercure与Web服务器在同一机器,可让Mercure监听本地http端口,由Nginx/Apache做SSL反向代理;若Mercure直接对外提供服务,启动时需指定--cert和--key的文件路径
  • 查看浏览器控制台,是否存在因证书问题拦截Mercure订阅请求的提示

3. 修复反向代理的长连接超时

Mercure依赖Server-Sent Events(SSE)维持长连接,线上反向代理的超时设置可能强制断开连接,导致反复重连挤占资源:

  • Nginx的Mercure location块添加以下配置:
    proxy_set_header Connection '';
    proxy_http_version 1.1;
    chunked_transfer_encoding off;
    proxy_buffering off;
    proxy_cache off;
    proxy_read_timeout 86400s;
    
  • Apache需先启用mod_proxy和mod_proxy_http模块,再添加:
    ProxyPass /mercure http://127.0.0.1:3000/mercure
    ProxyPassReverse /mercure http://127.0.0.1:3000/mercure
    ProxyTimeout 86400
    RequestHeader set Connection ""
    
  • 查看Mercure日志(默认路径/var/log/mercure/或启动时指定的路径),是否存在频繁的连接断开、重连记录

4. 检查连接数与主题负载

所有页面均订阅多个主题,线上用户量上升后,Mercure的连接数可能超出限制:

  • 查看Mercure启动参数中的MAX_CONNECTIONS(默认值1000),若不足可适当调高,比如设置--max-connections=5000
  • 执行mercure stats命令,查看当前连接数、广播量等指标,判断是否达到性能瓶颈

5. 验证Symfony端的Mercure配置

确保mercure.yaml中的hub.url指向线上有效地址,示例配置:

mercure:
    hubs:
        default:
            url: '%env(MERCURE_URL)%'
            jwt: '%env(MERCURE_JWT_SECRET)%'
  • 检查环境变量MERCURE_URL,避免使用本地地址http://localhost:3000/.well-known/mercure,需替换为线上可访问的地址,比如https://your-app-domain.com/.well-known/mercure

6. 逐个排查主题影响

临时修改代码,让页面仅订阅单个主题,观察AJAX请求是否恢复正常,逐步排查是否存在某个主题广播频率过高,挤占AJAX请求带宽的情况

快速验证小技巧

  • 直接在浏览器访问Mercure端点(比如https://your-app-domain.com/.well-known/mercure),确认是否返回200 OK及Mercure标识信息
  • 用curl测试订阅功能:
    curl -N -H "Accept: text/event-stream" "https://your-app-domain.com/.well-known/mercure?topic=chat-messages"
    
    随后在后台触发一条广播,查看curl是否能收到事件,判断Mercure Hub是否正常工作

内容的提问来源于stack exchange,提问作者Snoop9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:40:42