【问题标题】:Socketio Not Posting Within NGINX Flask ApplicationSocketio 不在 NGINX Flask 应用程序中发布
【发布时间】:2019-10-24 01:35:51
【问题描述】:

我有一个在 NGINX 后面运行的 Flask 应用程序,我正在使用 Gunicorn 进行部署。当我部署时,一切正常,我可以点击我的服务器 IP 并查看应用程序运行没有问题,但是当我执行使用 socketio 的操作时,该操作不会传递到后端,我相信这是一个问题我在 NGINX 上的配置。我的 conf.d 文件有以下内容

server {
    listen 80;
    server_name MY_SERVER_IP;

    location / {
        proxy_pass http://127.0.0.1:8000;
    }

    location /socket.io {
        include proxy_params;
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_pass http://127.0.0.1:8000/socket.io;
    }
}

我使用

部署应用程序

gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 app:app

在我的 app.py 中,我正在运行 socketio 服务器

socketio.run(app, host='127.0.0.1', port=80, debug=True)

在控制台中也看到了这个...

socket.io.min.js:2 GET http://127.0.0.1:8000/socket.io/?EIO=3&transport=polling&t=MuA1z9K net::ERR_CONNECTION_REFUSED

一切都在本地工作。请记住,我对使用 socketio 的 Flask 部署相当陌生。

【问题讨论】:

    标签: flask websocket socket.io flask-socketio


    【解决方案1】:

    您的服务器正在端口 8000 上运行,因此您的 proxy_pass 语句应该转到该端口,而不是 5000:

    proxy_pass http://127.0.0.1:8000/socket.io;
    

    还请注意,当您通过 gunicorn 运行服务器时,socketio.run() 行不会执行,这是在您不使用第三方 Web 服务器(如 gunicorn 或 uwsgi)时使用的,我猜是什么你在本地使用。

    【讨论】:

    • 感谢您的回复。不幸的是,这种改变并没有奏效。我需要一个目录/socket.io,因为我没有。它只是内置在 app.py 和模板文件中
    • js中的Socket连接为:var socket = io.connect('127.0.0.1:8000');我在 XHR 中收到失败的标头响应。
    • /socket.io URL 由 Socket.IO 服务器在内部处理,您的系统中不需要该目录。你在客户端的连接语句是什么/
    【解决方案2】:

    我与 socket.io 的连接设置不正确。我应该有 var socket = io();在我的 js 脚本中,而不是 var socket = io.connect('127.0.0.1:8000');每documentation

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 2022-01-11
      • 2022-01-05
      • 2018-07-05
      相关资源
      最近更新 更多