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

部署到CleverCloud后Flask-SocketIO持续报错,本地运行正常

问题:Flask-SocketIO部署到CleverCloud后WebSocket/XHR Polling连接失败

将Flask-SocketIO应用部署到CleverCloud后,持续遇到XHR Polling错误;强制指定{transports: ['websocket']}时,WebSocket连接直接失败。本地运行完全正常,仅部署到CleverCloud后出现异常。


服务器代码

application = Flask(__name__, template_folder='templates', static_folder='static')
application.secret_key = os.getenv('FLASK_SECRET_KEY')
application.config.update(SESSION_COOKIE_SAMESITE="None", SESSION_COOKIE_SECURE=True)
socketio = SocketIO(application, cors_allowed_origins="*", logger=True, engineio_logger=True)
...
...
...
if __name__ == '__main__':
    socketio.run(application)

客户端代码(messages命名空间)

var socket = io('https://website.cleverapps.io/messages', {transports: ['websocket']});
...

依赖版本

  • Flask 3.0.0
  • eventlet 0.35.1
  • Flask-SocketIO 5.3.6
  • python-engineio 4.8.2
  • python-socketio 5.11.0
    客户端使用CDN版socketio.js 4.3.1

部署环境问题

CleverCloud默认用uWSGI部署,尝试按文档配置uWSGI但对该环境下的配置方式困惑。已设置uWSGI workers = 1。

错误日志

raise RuntimeError('You need to use the eventlet server. '
2024-02-04T06:22:24-06:00 RuntimeError: You need to use the eventlet server. See the Deployment section of the documentation for more information.
2024-02-04T06:22:24-06:00 [pid: 1799|app: 0|req: 10/22] my.ip.ad.dress () {62 vars in 1346 bytes} [Sun Feb 4 12:22:24 2024] GET /socket.io/?EIO=4&transport=websocket => generated 0 bytes in 1 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0)
2024-02-04T06:22:29-06:00 b64876ed-c169-425c-8eac-38e215a8f159 nginx: 2024/02/04 12:22:29 [error] 1556#1556: *37 upstream prematurely closed connection while reading response header from upstream, client: 91.208.207.142, server: _, request: "GET /socket.io/?EIO=4&transport=websocket HTTP/1.1", upstream: "uwsgi://127.0.0.1:9000", host: "website.cleverapps.io"
2024-02-04T06:22:29-06:00 ybZzQUFM8joDYmhGAAAE: Sending packet OPEN data {'sid': 'ybZzQUFM8joDYmhGAAAE', 'upgrades': [], 'pingTimeout': 20000, 'pingInterval': 25000}
2024-02-04T06:22:29-06:00 INFO:engineio.server:ybZzQUFM8joDYmhGAAAE: Sending packet OPEN data {'sid': 'ybZzQUFM8joDYmhGAAAE', 'upgrades': [], 'pingTimeout': 20000, 'pingInterval': 25000}
2024-02-04T06:22:29-06:00 ybZzQUFM8joDYmhGAAAE: Received request to upgrade to websocket
2024-02-04T06:22:29-06:00 INFO:engineio.server:ybZzQUFM8joDYmhGAAAE: Received request to upgrade to websocket
2024-02-04T06:22:29-06:00 Traceback (most recent call last):
2024-02-04T06:22:29-06:00 File "/home/bas/venv/lib/python3.11/site-packages/flask/app.py", line 1478, in __call__
2024-02-04T06:22:29-06:00 return self.wsgi_app(environ, start_response)
2024-02-04T06:22:29-06:00 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-02-04T06:22:29-06:00 File "/home/bas/venv/lib/python3.11/site-packages/flask_socketio/__init__.py", line 43, in __call__
2024-02-04T06:22:29-06:00 return super(_SocketIOMiddleware, self).__call__(environ,
2024-02-04T06:22:29-06:00 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-02-04T06:22:29-06:00 File "/home/bas/venv/lib/python3.11/site-packages/engineio/middleware.py", line 63, in __call__
2024-02-04T06:22:29-06:00 return self.engineio_app.handle_request(environ, start_response)
2024-02-04T06:22:29-06:00 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-02-04T06:22:29-06:00 File "/home/bas/venv/lib/python3.11/site-packages/socketio/server.py", line 430, in handle_request
2024-02-04T06:22:29-06:00 return self.eio.handle_request(environ, start_response)
2024-02-04T06:22:29-06:00 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-02-04T06:22:29-06:00 File "/home/bas/venv/lib/python3.11/site-packages/engineio/server.py", line 261, in handle_request
2024-02-04T06:22:29-06:00 r = self._handle_connect(environ, start_response,
2024-02-04T06:22:29-06:00 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-02-04T06:22:29-06:00 File "/home/bas/venv/lib/python3.11/site-packages/engineio/server.py", line 401, in _handle_connect
2024-02-04T06:22:29-06:00 ret = s.handle_get_request(environ, start_response)
2024-02-04T06:22:29-06:00 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-02-04T06:22:29-06:00 File "/home/bas/venv/lib/python3.11/site-packages/engineio/socket.py", line 90, in handle_get_request
2024-02-04T06:22:29-06:00 return getattr(self, '_upgrade_' + transport)(environ,
2024-02-04T06:22:29-06:00 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-02-04T06:22:29-06:00 File "/home/bas/venv/lib/python3.11/site-packages/engineio/socket.py", line 146, in _upgrade_websocket
2024-02-04T06:22:29-06:00 return ws(environ, start_response)
2024-02-04T06:22:29-06:00 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-02-04T06:22:29-06:00 File "/home/bas/venv/lib/python3.11/site-packages/engineio/async_drivers/eventlet.py", line 40, in __call__
2024-02-04T06:22:29-06:00 raise RuntimeError('You need to use the eventlet server. '
2024-02-04T06:22:29-06:00 RuntimeError: You need to use the eventlet server. See the Deployment section of the documentation for more information.
2024-02-04T06:22:29-06:00 [pid: 1799|app: 0|req: 11/23] my.ip.ad.dress () {62 vars in 1346 bytes} [Sun Feb 4 12:22:29 2024] GET /socket.io/?EIO=4&transport=websocket => generated 0 bytes in 1 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0)

解决方向

  1. 替换uWSGI为eventlet启动:CleverCloud默认用uWSGI,但Flask-SocketIO的WebSocket支持依赖eventlet服务器。在项目根目录创建clevercloud/python.json配置文件,指定启动命令:
{
  "command": "eventlet -w 1 app:application"
}

注意将app:application替换为你的Flask应用实例路径(比如应用在main.py里就写main:application)。

  1. 取消客户端强制WebSocket配置:暂时移除transports: ['websocket'],让客户端自动选择传输方式,避免环境不支持直接WebSocket导致的失败:
var socket = io('https://website.cleverapps.io/messages');
  1. 验证依赖兼容性:尝试降级Flask到2.3.x版本,或升级Flask-SocketIO到最新稳定版,排查版本不匹配问题。

  2. 确认eventlet安装状态:查看CleverCloud部署日志,确认eventlet是否成功安装。若安装异常,可尝试删除requirements.txt中的版本号,重新部署时清理环境缓存。

  3. 检查CleverCloud代理配置:默认情况下CleverCloud的nginx代理支持WebSocket,但若有自定义nginx配置,需确保包含WebSocket请求头传递和升级规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:39:58