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

Flask-SocketIO搭配Gevent/Eventlet部署IIS后连接不稳定问题求助

Flask-SocketIO + Windows IIS 稳定部署可行方案

肯定有不少人成功实现过这个组合的稳定部署,你的问题大概率出在IIS配置细节或者Flask-SocketIO的参数适配上,以下是经过验证的排查和解决步骤:

1. 先搞定IIS的WebSocket支持与反向代理规则

  • 首先确保服务器已经安装了WebSocket协议:打开服务器管理器 -> 添加角色和功能 -> Web服务器 -> 应用开发 -> 勾选WebSocket协议完成安装
  • 配置URL重写规则时,必须添加WebSocket的匹配条件:
    在反向代理规则的「条件」标签页,添加两个条件:
    • 输入{HTTP_CONNECTION},匹配模式设为Upgrade
    • 输入{HTTP_UPGRADE},匹配模式设为websocket
  • 禁用站点的输出缓存:在站点的「输出缓存」功能里,禁用所有缓存规则,或者针对SocketIO的路径(比如/socket.io/)设置不缓存,避免长连接被缓冲中断

2. 调整Flask-SocketIO的核心配置

  • 关闭DEBUG模式:部署环境下必须把app.config["DEBUG"]设为False,DEBUG模式的自动重载机制会导致连接频繁断开
  • 显式指定异步模式并配置CORS:初始化SocketIO时明确指定async_mode,同时根据实际环境调整CORS限制:
    socketio.init_app(app, async_mode='gevent', cors_allowed_origins="*", ping_timeout=60, ping_interval=25)
    
  • 调整ping参数:ping_interval设为25秒(小于IIS默认的120秒空闲超时),ping_timeout设为60秒,避免IIS因连接空闲主动断开

3. 修正Gevent服务器的绑定配置

  • 你的run.py里绑定的是127.0.0.1,这会导致只有本地能访问,IIS反向代理无法转发请求。改成绑定所有网卡:
    http_server = WSGIServer(('0.0.0.0', 5000), app, handler_class=WebSocketHandler)
    
  • 同时确保服务器防火墙开放5000端口,允许IIS所在进程访问该端口

4. 优化IIS应用程序池设置

  • 应用程序池的「托管管道模式」必须设为集成模式,经典模式不支持WebSocket的反向代理转发
  • 延长应用程序池的空闲超时时间:设为180秒(大于SocketIO的ping_interval),避免应用池因空闲回收导致连接中断
  • 确保应用程序池的运行身份有足够权限访问你的Flask应用目录和监听端口

5. 禁用ARR缓存

  • 打开IIS的「应用程序请求路由」,进入「服务器代理设置」,取消勾选「启用磁盘缓存」和「启用内核缓存」,缓存会干扰WebSocket的长连接通信

验证流程

  1. 先直接通过服务器IP+5000端口访问应用,测试SocketIO连接是否稳定,排除应用本身的问题
  2. 再通过IIS域名访问,观察浏览器控制台日志,确认连接是否恢复稳定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:23:15