Flask SocketIO & uWSGI causes 'TypeError: 'SocketIO' object is not callable'
我目前正在构建一个结合使用Flask和Flask SocketIO来处理HTTP和WebSocket流量组合的应用程序。 在将我的应用程序部署到服务器上并将uWSGI和Nginx添加为网关之后,wsgi脚本在日志中给我以下错误:
1 2 | TypeError: 'SocketIO' object is not callable [pid: 4262|app: 0|req: 3/8] XXX.XXX.XXX.XXX () {46 vars in 912 bytes} [Tue Jul 11 14:57:25 2017] GET / => generated 0 bytes in 0 msecs (HTTP/2.0 500) 0 |
如uWSGI文档中所述,我在配置文件中将set
The other alternative is to use the uWSGI web server, which comes with WebSocket functionality. The use of gevent is also a performant option, but slightly lower than eventlet.
有人知道我在做什么错吗? 我正在使用最新版本的Nginx。 我在这里先向您的帮助表示感谢。 我的设置:
烧瓶服务器(mymod.server)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from flask import Flask from flask_socketio import SocketIO, emit server = Flask(__name__) io = SocketIO(server) @server.route("/") def index(): return server.send_static_file("index.html") @io.on("ping") def ping(): emit("pong") |
WSGI脚本(项目的根)
1 2 3 4 | from mymod.server import io if __name__ =="__main__": io.run(host="127.0.0.1", port=8080) |
WSGI配置
1 2 3 4 5 6 7 8 9 10 11 12 | # Configuration file for Nginx [uwsgi] module = wsgi:io master = true processes = 5 buffer-size=32768 http-websockets = true socket = server.sock chmod-socket = 666 vacuum = true die-on-term = true logto = /var/log/uwsgi/%n.log |
Nginx配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | server { listen 443 http2 ssl; listen [::]:443 http2 ssl; server_name _; server_tokens off; location / { include uwsgi_params; uwsgi_pass unix:/home/user/project/server.sock; } location /socket.io/ { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection"upgrade"; proxy_pass http://unix:/home/user/project/server.sock; } } |
我如何启动服务器
1 | $ uwsgi --ini config.wsgi.ini |
事实证明,Flask-SocketIO可以简单地安装到原始的
1 2 | [uwsgi] module = wsgi:io |
至:
1 2 | [uwsgi] module = wsgi:app |
可以,但是uwsgi对SocketIO仍然有可怕的支持,从我所听说的情况来看,使gunicorn成为更好的选择。