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

Azure Web App中Python Flask Websocket回退轮询的解决方法咨询

解决Azure Web App中Flask Websocket回退轮询及gevent-websocket服务器错误

问题根源

日志提示的错误说明当前运行的服务器不支持websocket,Azure Web App默认的Flask服务器无法处理websocket长连接,因此会回退到轮询模式。

解决步骤

1. 修改应用启动逻辑

必须将Flask应用绑定到gevent-websocket的WSGI服务器,替代默认服务器。示例代码如下:

import os
from flask import Flask
from gevent.pywsgi import WSGIServer
from geventwebsocket.handler import WebSocketHandler

app = Flask(__name__)

# 此处添加你的websocket路由及业务逻辑
@app.route('/ws')
def handle_websocket():
    # 处理websocket连接的代码
    pass

if __name__ == '__main__':
    # 读取Azure环境变量中的端口,默认5000
    port = int(os.environ.get('PORT', 5000))
    # 启动支持websocket的服务器
    server = WSGIServer(('0.0.0.0', port), app, handler_class=WebSocketHandler)
    server.serve_forever()

2. 配置Azure Web App启动命令

Azure Web App需要明确指定启动命令,确保使用我们修改后的启动脚本:

  • 登录Azure门户,进入目标Web App
  • 导航至「配置」→「常规设置」→「启动命令」
  • 设置启动命令为python app.py(替换为你的主文件名,比如main.py)

3. 确认运行时环境

  • 在「配置」→「常规设置」中,确保Python版本设置为3.10,与应用依赖的版本一致
  • 检查启动命令是否生效,避免被默认的自动启动逻辑覆盖

4. 验证依赖安装

通过Kudu控制台查看站点虚拟环境的依赖列表,确认gevent==22.10.2和gevent-websocket==0.10.1已成功安装。

补充说明

  • 若使用Flask-SocketIO库,需额外指定异步模式为gevent:
from flask_socketio import SocketIO

socketio = SocketIO(app, async_mode='gevent')
  • Azure Web App免费层存在连接数限制,高并发websocket场景建议使用标准层及以上的服务计划。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:20:13