Flask-SocketIO 服务器部署到 Heroku 但不运行

时间:2021-06-07 22:23:50

标签: python heroku server host flask-socketio

我在 Python 上有一个简单的 Flask-SocketIO 服务器和一个 SocketIO_Client,它向服务器发送数据,一旦收到,它就会在控制台中打印出来。在本地主机上一切正常,但是当尝试在 Heroku 上托管服务器时,它成功部署,但似乎没有运行。我在 CLI 日志中收到以下错误:

<块引用>

heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=socket-server1337.herokuapp.com request_id=53e155e2-ba83-4862-84f8-b53014af539b fwd="..." dyno= connect= service= status=503 bytes= protocol=https

当我尝试从客户端连接到服务器时,出现此错误:

<块引用>

heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="//socket.io/?EIO=3&transport=polling&t=1623103978016-0" host=socket-server1337 .herokuapp.com request_id=12d0acb9-b5e2-4cf8-8815-81edec9cf525 fwd="..." dyno= connect= service= status=503 bytes= protocol=https

这是我服务器的代码:

from flask import Flask, render_template
from flask_socketio import SocketIO, emit

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
socketio = SocketIO(app, cors_allowed_origins="*")

@socketio.on('keylogger')
def print_keystrokes(data):
    print(data["keylogged"])


if __name__ == '__main__':
    socketio.run(app)

这是我的 Procfile:

<块引用>

网页:python Socket.py

我相信问题出在我的 Procfile 配置中。我根据flask-socketio文档尝试将Gunicorn与Gevent一起使用:

<块引用>

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

以及 eventlet:

<块引用>

web: gunicorn --worker-class eventlet -w 1 Socket:app

然而,以上都没有奏效。任何帮助将不胜感激。提前致谢。

1 个答案:

答案 0 :(得分:0)

问题是 Heroku 需要您的应用程序侦听它们在 $PORT 环境变量中传递给您的特定网络端口。

解决此问题的一种方法是按如下方式更改脚本的底线:

socketio.run(app, port=int(os.environ.get('PORT', 5000)))

您还需要在脚本顶部添加一个 import os