簡體   English   中英

Flask SocketIO和uWSGI導致“ TypeError:'SocketIO'對象不可調用”

[英]Flask SocketIO & uWSGI causes 'TypeError: 'SocketIO' object is not callable'

我目前正在構建一個結合使用Flask和Flask SocketIO來處理HTTP和WebSocket流量組合的應用程序。 在將我的應用程序部署到服務器上並將uWSGI和Nginx添加為網關之后,wsgi腳本在日志中給我以下錯誤:

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 http-websockets標志設置為true的功能。 Flask SocketIO文檔聲明他們支持uWSGI:

另一種選擇是使用帶有WebSocket功能的uWSGI Web服務器。 gevent的使用也是一個性能選項,但比eventlet略低。

有人知道我在做什么錯嗎? 我正在使用最新版本的Nginx。 我在這里先向您的幫助表示感謝。 我的設置:

燒瓶服務器(mymod.server)

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腳本(項目的根)

from mymod.server import io

if __name__ == "__main__":
    io.run(host="127.0.0.1", port=8080)

WSGI配置

# 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配置

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;
    }
}

我如何啟動服務器

$ uwsgi --ini config.wsgi.ini

事實證明,Flask-SocketIO可以簡單地安裝到原始app對象上,替換以下內容:

[uwsgi]
module = wsgi:io

至:

[uwsgi]
module = wsgi:app

可以,但是uwsgi對SocketIO仍然有糟糕的支持,從我所聽說的情況來看,使gunicorn成為更好的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM