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

如何在Phusion Passenger中使用Flask-SocketIO?

如何在Phusion Passenger中使用Flask-SocketIO?

嘿,我之前也踩过这个坑,刚好能给你捋清楚怎么解决这个矛盾——Phusion Passenger要自己接管服务器启动,而Flask-SocketIO又依赖异步服务器的问题,其实只要调整下代码和配置就能搞定,具体步骤如下:

  • 第一步:安装异步后端依赖
    Flask-SocketIO需要异步服务器来处理实时连接,Passenger对eventlet的支持最好,先把它装上:

    pip install eventlet
    
  • 第二步:调整你的Flask-SocketIO代码
    核心是要给Phusion Passenger暴露一个它能识别的、包含SocketIO逻辑的WSGI应用对象,而不是普通的Flask app。修改后的代码如下:

    from flask import Flask
    from flask_socketio import SocketIO
    
    app = Flask('')
    # 明确指定用eventlet作为异步后端,确保SocketIO能正常处理实时连接
    socketio = SocketIO(app, async_mode='eventlet')
    
    @app.route('/')
    def home():
        return open("index.html", "r").read()
    
    @socketio.on('echo')
    def echo(json):
        return json
    
    # 关键!给Passenger暴露处理SocketIO的WSGI应用
    application = socketio.get_wsgi_app()
    

    这里要注意:绝对不能调用app.run()或者socketio.run(),完全交给Passenger来启动就好。

  • 第三步:配置Phusion Passenger
    不管你用Nginx还是Apache搭配Passenger,都要确保配置正确指向你的应用,以Nginx为例,在server块里添加这些配置:

    server {
        listen 80;
        server_name your-domain.com;
    
        # Passenger要求的根目录,指向你应用下的public文件夹(没有就新建一个空的)
        root /path/to/your/app/public;
        # 你的应用根目录
        passenger_app_root /path/to/your/app;
        # 指定应用类型为WSGI
        passenger_app_type wsgi;
        # 指向你的启动文件(比如上面的代码存在wsgi.py里)
        passenger_startup_file wsgi.py;
        passenger_enabled on;
    }
    
  • 几个重要的注意点

    • 确保你的Passenger版本是6.0及以上,旧版本对异步WSGI的支持不太好
    • 不要跳过安装eventlet/gevent,同步模式下SocketIO根本无法处理实时连接
    • 必须创建public目录,这是Passenger识别Python WSGI应用的要求之一,哪怕目录里什么都没有

这样调整后,Passenger就能正确加载包含SocketIO逻辑的应用,同时处理好实时连接的异步需求啦。

备注:内容来源于stack exchange,提问作者HGStyle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:45:30